• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/omcproxy/src/mrib.h

  1 /*
  2  * Author: Steven Barth <steven at midlink.org>
  3  *
  4  * Copyright 2015 Deutsche Telekom AG
  5  *
  6  * Licensed under the Apache License, Version 2.0 (the "License");
  7  * you may not use this file except in compliance with the License.
  8  * You may obtain a copy of the License at
  9  *
 10  *  http://www.apache.org/licenses/LICENSE-2.0
 11  *
 12  * Unless required by applicable law or agreed to in writing, software
 13  * distributed under the License is distributed on an "AS IS" BASIS,
 14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  * See the License for the specific language governing permissions and
 16  * limitations under the License.
 17  *
 18  */
 19 
 20 #pragma once
 21 
 22 #include <netinet/in.h>
 23 #include <libubox/list.h>
 24 #include <sys/socket.h>
 25 
 26 #include <netinet/icmp6.h>
 27 
 28 #define icmp6_filter icmpv6_filter
 29 #include <linux/igmp.h>
 30 #include <linux/icmpv6.h>
 31 #undef icmp6_filter
 32 
 33 #define MRIB_DEFAULT_LIFETIME 125
 34 
 35 #define IPV6_ALL_NODES_INIT             { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1 } } }
 36 #define INADDR_ALLIGMPV3RTRS_GROUP      cpu_to_be32(0xe0000016U)
 37 
 38 typedef uint32_t mrib_filter;
 39 struct mrib_iface;
 40 struct mrib_user;
 41 struct mrib_querier;
 42 
 43 typedef void(mrib_cb)(struct mrib_user *user, const struct in6_addr *group,
 44                 const struct in6_addr *source, mrib_filter *filter);
 45 
 46 typedef void(mrib_igmp_cb)(struct mrib_querier *mrib, const struct igmphdr *igmp, size_t len,
 47                 const struct sockaddr_in *from);
 48 
 49 typedef void(mrib_mld_cb)(struct mrib_querier *mrib, const struct mld_hdr *mld, size_t len,
 50                 const struct sockaddr_in6 *from);
 51 
 52 struct mrib_user {
 53         struct list_head head;
 54         struct mrib_iface *iface;
 55         mrib_cb *cb_newsource;
 56 };
 57 
 58 struct mrib_querier {
 59         struct list_head head;
 60         struct mrib_iface *iface;
 61         mrib_igmp_cb *cb_igmp;
 62         mrib_mld_cb *cb_mld;
 63 };
 64 
 65 // Register a new user to mrib
 66 int mrib_attach_user(struct mrib_user *user, int ifindex, mrib_cb *cb_newsource);
 67 
 68 // Deregister a user from mrib
 69 void mrib_detach_user(struct mrib_user *user);
 70 
 71 // Register a querier to mrib
 72 int mrib_attach_querier(struct mrib_querier *querier, int ifindex, mrib_igmp_cb *cb_igmp, mrib_mld_cb *cb_mld);
 73 
 74 // Deregister a querier from mrib
 75 void mrib_detach_querier(struct mrib_querier *querier);
 76 
 77 // Flush state for a multicast route
 78 int mrib_flush(struct mrib_user *user, const struct in6_addr *group, uint8_t group_plen, const struct in6_addr *source);
 79 
 80 // Add interface to filter
 81 int mrib_filter_add(mrib_filter *filter, struct mrib_user *user);
 82 
 83 // Send IGMP-packet
 84 int mrib_send_igmp(struct mrib_querier *querier, struct igmpv3_query *igmp, size_t len,
 85                 const struct sockaddr_in *dest);
 86 
 87 // Send MLD-packet
 88 int mrib_send_mld(struct mrib_querier *querier, struct mld_hdr *mld, size_t len,
 89                 const struct sockaddr_in6 *dest);
 90 
 91 // Get source address
 92 int mrib_mld_source(struct mrib_querier *q, struct in6_addr *source);
 93 int mrib_igmp_source(struct mrib_querier *q, struct in_addr *source);
 94 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt