master/module.c
branchredundancy
changeset 2156 71425e6120d8
parent 2129 78efdac9ee87
child 2159 72ac85ee3729
equal deleted inserted replaced
2142:26c74f035ab0 2156:71425e6120d8
   465     char str[20];
   465     char str[20];
   466     unsigned int i;
   466     unsigned int i;
   467 
   467 
   468     for (i = 0; i < master_count; i++) {
   468     for (i = 0; i < master_count; i++) {
   469         master = &masters[i];
   469         master = &masters[i];
       
   470         ec_mac_print(net_dev->dev_addr, str);
   470 
   471 
   471         down(&master->device_sem);
   472         down(&master->device_sem);
   472         if (master->main_device.dev) { // master already has a device
   473 
   473             up(&master->device_sem);
   474         if (!master->main_device.dev
   474             continue;
   475                 && (ec_mac_equal(master->main_mac, net_dev->dev_addr)
   475         }
   476                     || ec_mac_is_broadcast(master->main_mac))) {
   476             
   477 
   477         if (ec_mac_equal(master->main_mac, net_dev->dev_addr)
   478             EC_INFO("Accepting %s as main device for master %u.\n",
   478                 || ec_mac_is_broadcast(master->main_mac)) {
       
   479             ec_mac_print(net_dev->dev_addr, str);
       
   480             EC_INFO("Accepting device %s for master %u.\n",
       
   481                     str, master->index);
   479                     str, master->index);
   482 
   480 
   483             ec_device_attach(&master->main_device, net_dev, poll, module);
   481             ec_device_attach(&master->main_device, net_dev, poll, module);
   484             up(&master->device_sem);
   482             up(&master->device_sem);
   485             
   483 
   486             snprintf(net_dev->name, IFNAMSIZ, "ec%u", master->index);
   484             snprintf(net_dev->name, IFNAMSIZ, "ec%u", master->index);
   487 
   485 
   488             return &master->main_device; // offer accepted
   486             return &master->main_device; // offer accepted
   489         }
   487 
   490         else {
   488         } else if (!master->backup_device.dev
       
   489                 && ec_mac_equal(master->backup_mac, net_dev->dev_addr)) {
       
   490 
       
   491             EC_INFO("Accepting %s as backup device for master %u.\n",
       
   492                     str, master->index);
       
   493 
       
   494             ec_device_attach(&master->backup_device, net_dev, poll,
       
   495                     module);
   491             up(&master->device_sem);
   496             up(&master->device_sem);
   492 
   497 
   493             if (master->debug_level) {
   498             snprintf(net_dev->name, IFNAMSIZ, "ecb%u", master->index);
   494                 ec_mac_print(net_dev->dev_addr, str);
   499 
   495                 EC_MASTER_DBG(master, 0, "Master declined device %s.\n",
   500             return &master->backup_device; // offer accepted
   496                         str);
   501 
   497             }
   502         } else {
       
   503 
       
   504             up(&master->device_sem);
       
   505 
       
   506             EC_MASTER_DBG(master, 1, "Master declined device %s.\n", str);
   498         }
   507         }
   499     }
   508     }
   500 
   509 
   501     return NULL; // offer declined
   510     return NULL; // offer declined
   502 }
   511 }