--- zzzz-none-000/linux-2.6.32.60/net/bridge/br_private.h 2012-10-07 21:41:24.000000000 +0000 +++ ur8-7270-606/linux-2.6.32.60/net/bridge/br_private.h 2013-02-12 11:29:49.000000000 +0000 @@ -40,6 +40,15 @@ unsigned char addr[6]; }; +#if defined(CONFIG_FUSIV_KERNEL_AP_2_AP) || defined(CONFIG_FUSIV_KERNEL_AP_2_AP_MODULE) +struct apBridgeEntryInfo +{ + void *pApBridgeEntry; + unsigned short hashValue; + unsigned char apId; +}; +#endif + struct mac_addr { unsigned char addr[6]; @@ -47,6 +56,9 @@ struct net_bridge_fdb_entry { +#if defined(CONFIG_FUSIV_KERNEL_AP_2_AP) || defined(CONFIG_FUSIV_KERNEL_AP_2_AP_MODULE) + struct apBridgeEntryInfo apBridgeEntryData; +#endif struct hlist_node hlist; struct net_bridge_port *dst; @@ -57,6 +69,65 @@ unsigned char is_static; }; +#ifdef CONFIG_IFX_IGMP_SNOOPING + +typedef enum { + IPV4 = 0, + IPV6, +} ptype_t; + +struct ipaddr { + ptype_t type; + union { + struct in_addr ip4; + struct in6_addr ip6; + } addr; +}; + +typedef struct ipaddr ipaddr_t; + +enum igmp_ver { + IGMPV1 = 1, + IGMPV2, + IGMPV3, +}; + +enum mld_ver { + MLDV1 = 1, + MLDV2, +}; + +/* Set router port ioctl request */ +struct router_port { + ptype_t type; + u32 if_index; /* interface index */ + u32 expires; /* expiry time */ +}; + +/* Multicast group record ioctl request */ +struct br_grp_rec { + u32 if_index; /* interface index */ + ipaddr_t gaddr; /* Group address */ + u32 filter_mode; /* Filter mode */ + u32 compat; /* Compatibility mode */ + u32 nsrc; /* number of sources */ + ipaddr_t slist[0]; /* source list */ +}; + +struct net_bridge_mg_entry +{ + struct hlist_node hlist; + ipaddr_t gaddr; /* Group ipaddr */ + u8 filter_mode; /* 0 = EX, 1 = IN */ + u8 compat_mode; /* 1 = v1, 2 = v2, 3 = v3 */ + struct net_bridge_port *port; + struct rcu_head rcu; + u32 saddr_cnt; + ipaddr_t saddr[0]; /* Array of src ipaddr */ +}; + +#endif /* CONFIG_IFX_IGMP_SNOOPING */ + struct net_bridge_port { struct net_bridge *br; @@ -85,6 +156,16 @@ unsigned long flags; #define BR_HAIRPIN_MODE 0x00000001 +#ifdef CONFIG_IFX_IGMP_SNOOPING + u32 mghash_secret; + u32 mghash_secret6; + spinlock_t mghash_lock; + struct hlist_head mghash[BR_HASH_SIZE]; + u8 igmp_router_port; + struct timer_list igmp_router_timer; + u8 mld_router_port; + struct timer_list mld_router_timer; +#endif /* CONFIG_IFX_IGMP_SNOOPING */ }; struct net_bridge @@ -96,6 +177,15 @@ struct hlist_head hash[BR_HASH_SIZE]; struct list_head age_list; unsigned long feature_mask; + +#if defined(CONFIG_FUSIV_KERNEL_IGMP_SNOOP) || defined(CONFIG_FUSIV_KERNEL_IGMP_SNOOP_MODULE) + void *mfdb; +#endif + +#if defined(CONFIG_FUSIV_KERNEL_PPPOE_RELAY) || defined(CONFIG_FUSIV_KERNEL_PPPOE_RELAY_MODULE) + char in_dev_name[16]; +#endif + #ifdef CONFIG_BRIDGE_NETFILTER struct rtable fake_rtable; #endif @@ -131,6 +221,9 @@ struct timer_list topology_change_timer; struct timer_list gc_timer; struct kobject *ifobj; + + int automatic_mac_disabled; /* AVM */ + }; extern struct notifier_block br_device_notifier; @@ -168,6 +261,10 @@ struct net_bridge_port *source, const unsigned char *addr); +/* AVM */ +extern void br_fdb_delete_by_mac_if_local_without_port(struct net_bridge *br, unsigned char *addr); + + /* br_forward.c */ extern void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb); @@ -233,6 +330,11 @@ u32 path_cost); extern ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id); +/* AVM */ +extern void br_stp_set_bridge_id(struct net_bridge *br, void *addr); + + + /* br_stp_bpdu.c */ struct stp_proto; extern void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb, @@ -253,6 +355,20 @@ extern void br_netlink_fini(void); extern void br_ifinfo_notify(int event, struct net_bridge_port *port); +#ifdef CONFIG_IFX_IGMP_SNOOPING +/* br_mcast_snooping.c */ +extern void br_mcast_port_init(struct net_bridge_port *port); +extern void br_mcast_port_cleanup(struct net_bridge_port *port); +extern int br_mg_del_record(struct net_bridge_port *port, ipaddr_t *gaddr); +extern int br_mg_add_entry(struct net_bridge_port *port, ipaddr_t *gaddr, u8 filter, u8 compat, u32 saddr_cnt, ipaddr_t *saddr); +extern int br_selective_flood(struct net_bridge_port *p, struct sk_buff *skb); + +extern int bridge_igmp_snooping; +extern int bridge_mld_snooping; +extern void br_mcast_snoop_init(void); +extern void br_mcast_snoop_deinit(void); +#endif + #ifdef CONFIG_SYSFS /* br_sysfs_if.c */ extern struct sysfs_ops brport_sysfs_ops;