Changeset 10891


Ignore:
Timestamp:
11/13/08 01:49:37 (5 years ago)
Author:
BrainSlayer
Message:

two duplex modes, one for master, one for slave

Location:
src/linux/xscale/linux-2.6.23
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/linux/xscale/linux-2.6.23/drivers/net/bonding/bond_main.c

    r10881 r10891  
    116116                       "1 for active-backup, 2 for balance-xor, " 
    117117                       "3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, " 
    118                        "6 for balance-alb, 7 for weighted-rr, 8 duplex"); 
     118                       "6 for balance-alb, 7 for weighted-rr, 8 duplex-master, 9 duplex-slave"); 
    119119module_param(primary, charp, 0); 
    120120MODULE_PARM_DESC(primary, "Primary network device to use"); 
     
    166166{       "balance-alb",          BOND_MODE_ALB}, 
    167167{       "weighted-rr",          BOND_MODE_WEIGHTED_RR}, 
    168 {       "duplex",               BOND_MODE_DUPLEX}, 
     168{       "duplex-master",                BOND_MODE_DUPLEX}, 
     169{       "duplex-slave",         BOND_MODE_DUPLEX_SLAVE}, 
    169170{       NULL,                   -1}, 
    170171}; 
     
    210211                return "weighted round robin (weighted-rr)"; 
    211212        case BOND_MODE_DUPLEX: 
    212                 return "duplex mode"; 
     213                return "duplex master mode"; 
     214        case BOND_MODE_DUPLEX_SLAVE: 
     215                return "duplex slave mode"; 
    213216        default: 
    214217                return "unknown"; 
     
    40894092 
    40904093 
    4091 static int bond_xmit_duplex(struct sk_buff *skb, struct net_device *bond_dev) 
     4094static int bond_xmit_duplex_master(struct sk_buff *skb, struct net_device *bond_dev) 
    40924095{ 
    40934096        struct bonding *bond = bond_dev->priv; 
     
    41134116        bond_for_each_slave_from(bond, slave, i, start_at) { 
    41144117                if ((i % 2) && IS_UP(slave->dev) && 
     4118                        (slave->link == BOND_LINK_UP) && 
     4119                    (slave->state == BOND_STATE_ACTIVE)) { 
     4120                         
     4121                        res = bond_dev_queue_xmit(bond, skb, slave->dev); 
     4122                        write_lock(&bond->curr_slave_lock); 
     4123                        bond->curr_active_slave = slave->next; 
     4124                        write_unlock(&bond->curr_slave_lock); 
     4125 
     4126                        goto out; 
     4127                } 
     4128        } 
     4129out: 
     4130        if (res) { 
     4131                /* no suitable interface, frame not sent */ 
     4132                dev_kfree_skb(skb); 
     4133        } 
     4134        read_unlock(&bond->lock); 
     4135        return 0; 
     4136} 
     4137 
     4138static int bond_xmit_duplex_slave(struct sk_buff *skb, struct net_device *bond_dev) 
     4139{ 
     4140        struct bonding *bond = bond_dev->priv; 
     4141        struct slave *slave, *start_at; 
     4142        int i; 
     4143        int res = 1; 
     4144 
     4145        read_lock(&bond->lock); 
     4146 
     4147        if (!BOND_IS_OK(bond)) { 
     4148                goto out; 
     4149        } 
     4150 
     4151        read_lock(&bond->curr_slave_lock); 
     4152        slave = start_at = bond->curr_active_slave; 
     4153        read_unlock(&bond->curr_slave_lock); 
     4154 
     4155        if (!slave) { 
     4156                goto out; 
     4157        } 
     4158 
     4159try_send: 
     4160        bond_for_each_slave_from(bond, slave, i, start_at) { 
     4161                if (!(i % 2) && IS_UP(slave->dev) && 
    41154162                        (slave->link == BOND_LINK_UP) && 
    41164163                    (slave->state == BOND_STATE_ACTIVE)) { 
     
    42934340                break; 
    42944341        case BOND_MODE_DUPLEX: 
    4295                 bond_dev->hard_start_xmit = bond_xmit_duplex; 
     4342                bond_dev->hard_start_xmit = bond_xmit_duplex_master; 
     4343                break; 
     4344        case BOND_MODE_DUPLEX_SLAVE: 
     4345                bond_dev->hard_start_xmit = bond_xmit_duplex_slave; 
    42964346                break; 
    42974347        case BOND_MODE_ACTIVEBACKUP: 
  • src/linux/xscale/linux-2.6.23/include/linux/if_bonding.h

    r10881 r10891  
    7373#define BOND_MODE_WEIGHTED_RR   7 
    7474#define BOND_MODE_DUPLEX   8 
     75#define BOND_MODE_DUPLEX_SLAVE   9 
    7576 
    7677/* each slave's link has 4 states */ 
Note: See TracChangeset for help on using the changeset viewer.