Changeset 17086


Ignore:
Timestamp:
05/17/11 19:08:39 (2 years ago)
Author:
chris
Message:

brigdge isolate mode

Location:
src/linux/xscale/linux-2.6.34.6/net/bridge
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/linux/xscale/linux-2.6.34.6/net/bridge/br_forward.c

    r16036 r17086  
    125125void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, struct sk_buff *skb0) 
    126126{ 
    127         if (should_deliver(to, skb)) { 
     127        if (should_deliver(to, skb) && !(to->flags & BR_ISOLATE_MODE)) { 
    128128                if (skb0) 
    129129                        deliver_clone(to, skb, __br_forward); 
     
    180180                     struct sk_buff *skb0, 
    181181                     void (*__packet_hook)(const struct net_bridge_port *p, 
    182                                            struct sk_buff *skb)) 
     182                                           struct sk_buff *skb), 
     183                     bool forward) 
    183184{ 
    184185        struct net_bridge_port *p; 
     
    188189 
    189190        list_for_each_entry_rcu(p, &br->port_list, list) { 
     191                if (forward && (p->flags & BR_ISOLATE_MODE)) 
     192                        continue; 
     193 
    190194                prev = maybe_deliver(prev, p, skb, __packet_hook); 
    191195                if (IS_ERR(prev)) 
     
    211215void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb) 
    212216{ 
    213         br_flood(br, skb, NULL, __br_deliver); 
     217        br_flood(br, skb, NULL, __br_deliver, false); 
    214218} 
    215219 
     
    218222                      struct sk_buff *skb2) 
    219223{ 
    220         br_flood(br, skb, skb2, __br_forward); 
     224        br_flood(br, skb, skb2, __br_forward, true); 
    221225} 
    222226 
  • src/linux/xscale/linux-2.6.34.6/net/bridge/br_input.c

    r16424 r17086  
    8888 
    8989                br->dev->stats.multicast++; 
    90         } else if ((dst = __br_fdb_get(br, dest)) && dst->is_local) { 
     90        } else if ((p->flags & BR_ISOLATE_MODE) || 
     91                   ((dst = __br_fdb_get(br, dest)) && dst->is_local)) { 
    9192                skb2 = skb; 
    9293                /* Do not forward the packet since it's local. */ 
  • src/linux/xscale/linux-2.6.34.6/net/bridge/br_private.h

    r16001 r17086  
    120120        unsigned long                   flags; 
    121121#define BR_HAIRPIN_MODE         0x00000001 
     122#define BR_ISOLATE_MODE         0x00000002 
    122123 
    123124#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 
  • src/linux/xscale/linux-2.6.34.6/net/bridge/br_sysfs_if.c

    r16001 r17086  
    159159static BRPORT_ATTR(hairpin_mode, S_IRUGO | S_IWUSR, 
    160160                   show_hairpin_mode, store_hairpin_mode); 
     161 
     162static ssize_t show_isolate_mode(struct net_bridge_port *p, char *buf) 
     163{ 
     164        int isolate_mode = (p->flags & BR_ISOLATE_MODE) ? 1 : 0; 
     165        return sprintf(buf, "%d\n", isolate_mode); 
     166} 
     167static ssize_t store_isolate_mode(struct net_bridge_port *p, unsigned long v) 
     168{ 
     169        if (v) 
     170                p->flags |= BR_ISOLATE_MODE; 
     171        else 
     172                p->flags &= ~BR_ISOLATE_MODE; 
     173        return 0; 
     174} 
     175static BRPORT_ATTR(isolate_mode, S_IRUGO | S_IWUSR, 
     176                   show_isolate_mode, store_isolate_mode); 
    161177 
    162178#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 
     
    192208        &brport_attr_flush, 
    193209        &brport_attr_hairpin_mode, 
     210        &brport_attr_isolate_mode, 
    194211#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 
    195212        &brport_attr_multicast_router, 
Note: See TracChangeset for help on using the changeset viewer.