]> git.ipfire.org Git - people/ms/rstp.git/blobdiff - ctl_main.c
reindent source
[people/ms/rstp.git] / ctl_main.c
index 8d258444124448ae7a5e2b7892db7fc6ef244eb7..8eaa76d13912183163be25385dcc6ae1ba2dae6f 100644 (file)
 
 #define STP_IN_get_error_explanation CTL_error_explanation
 
-static void
-print_bridge_id (UID_BRIDGE_ID_T *bridge_id, unsigned char cr)
-{
-  printf("%04lX-%02x%02x%02x%02x%02x%02x",
-                  (unsigned long) bridge_id->prio,
-                  (unsigned char) bridge_id->addr[0],
-                  (unsigned char) bridge_id->addr[1],
-                  (unsigned char) bridge_id->addr[2],
-                  (unsigned char) bridge_id->addr[3],
-                  (unsigned char) bridge_id->addr[4],
-                  (unsigned char) bridge_id->addr[5]);
-  if (cr)
-        printf("\n");
-}
-
-static char *
-stp_state2str (RSTP_PORT_STATE stp_port_state, int detail)
-{
-  if (detail) {
-    switch (stp_port_state) {
-      case UID_PORT_DISABLED:   return "Disabled";
-      case UID_PORT_DISCARDING: return "Discarding";
-      case UID_PORT_LEARNING:   return "Learning";
-      case UID_PORT_FORWARDING: return "Forwarding";
-      case UID_PORT_NON_STP:    return "NoStp";
-      default:                  return "Unknown";
-    }
-  }
-
-  switch (stp_port_state) {
-    case UID_PORT_DISABLED:     return "Dis";
-    case UID_PORT_DISCARDING:   return "Blk";
-    case UID_PORT_LEARNING:     return "Lrn";
-    case UID_PORT_FORWARDING:   return "Fwd";
-    case UID_PORT_NON_STP:      return "Non";
-    default:                    return "Unk";
-  }
-}
-
-static void CLI_out_port_id (int port, unsigned char cr)
-{
-  static char ifname[IFNAMSIZ];
-  if (if_indextoname(port, ifname))
-    printf("%s", ifname);
-  else
-    printf ("Ifindex %02d", port);
-  if (cr)
-        printf("\n");
+static void print_bridge_id(UID_BRIDGE_ID_T * bridge_id, unsigned char cr)
+{
+       printf("%04lX-%02x%02x%02x%02x%02x%02x",
+              (unsigned long)bridge_id->prio,
+              (unsigned char)bridge_id->addr[0],
+              (unsigned char)bridge_id->addr[1],
+              (unsigned char)bridge_id->addr[2],
+              (unsigned char)bridge_id->addr[3],
+              (unsigned char)bridge_id->addr[4],
+              (unsigned char)bridge_id->addr[5]);
+       if (cr)
+               printf("\n");
+}
+
+static char *stp_state2str(RSTP_PORT_STATE stp_port_state, int detail)
+{
+       if (detail) {
+               switch (stp_port_state) {
+               case UID_PORT_DISABLED:
+                       return "Disabled";
+               case UID_PORT_DISCARDING:
+                       return "Discarding";
+               case UID_PORT_LEARNING:
+                       return "Learning";
+               case UID_PORT_FORWARDING:
+                       return "Forwarding";
+               case UID_PORT_NON_STP:
+                       return "NoStp";
+               default:
+                       return "Unknown";
+               }
+       }
+
+       switch (stp_port_state) {
+       case UID_PORT_DISABLED:
+               return "Dis";
+       case UID_PORT_DISCARDING:
+               return "Blk";
+       case UID_PORT_LEARNING:
+               return "Lrn";
+       case UID_PORT_FORWARDING:
+               return "Fwd";
+       case UID_PORT_NON_STP:
+               return "Non";
+       default:
+               return "Unk";
+       }
+}
+
+static void CLI_out_port_id(int port, unsigned char cr)
+{
+       static char ifname[IFNAMSIZ];
+       if (if_indextoname(port, ifname))
+               printf("%s", ifname);
+       else
+               printf("Ifindex %02d", port);
+       if (cr)
+               printf("\n");
 }
 
 int get_index_die(const char *ifname, const char *doc, int die)
 {
-  int r = if_nametoindex(ifname);
-  if (r == 0) {
-    fprintf(stderr, "Can't find index for %s %s. Not a valid interface.\n",
-            doc, ifname);
-    if (die)
-      exit(1);
-    return -1;
-  }
-  return r;
+       int r = if_nametoindex(ifname);
+       if (r == 0) {
+               fprintf(stderr,
+                       "Can't find index for %s %s. Not a valid interface.\n",
+                       doc, ifname);
+               if (die)
+                       exit(1);
+               return -1;
+       }
+       return r;
 }
 
 int get_index(const char *ifname, const char *doc)
 {
-  return get_index_die(ifname, doc, 1);
+       return get_index_die(ifname, doc, 1);
 }
 
-static int cmd_rstp(int argc, char *constargv)
+static int cmd_rstp(int argc, char *const *argv)
 {
-  int stp, r;
-  int br_index = get_index(argv[1], "bridge");
+       int stp, r;
+       int br_index = get_index(argv[1], "bridge");
 
-  if (!strcmp(argv[2], "on") || !strcmp(argv[2], "yes") 
-      || !strcmp(argv[2], "1"))
-    stp = 1;
-  else if (!strcmp(argv[2], "off") || !strcmp(argv[2], "no") 
-           || !strcmp(argv[2], "0"))
-    stp = 0;
-  else {
-    fprintf(stderr, "expect on/off for argument\n");
-    return 1;
-  }
-  r = CTL_enable_bridge_rstp(br_index, stp);
-  if (r) {
-    fprintf(stderr, "Failed to enable/disable RSTP: %s\n",
-            CTL_error_explanation(r));
-    return -1;
-  }
-  return 0;
+       if (!strcmp(argv[2], "on") || !strcmp(argv[2], "yes")
+           || !strcmp(argv[2], "1"))
+               stp = 1;
+       else if (!strcmp(argv[2], "off") || !strcmp(argv[2], "no")
+                || !strcmp(argv[2], "0"))
+               stp = 0;
+       else {
+               fprintf(stderr, "expect on/off for argument\n");
+               return 1;
+       }
+       r = CTL_enable_bridge_rstp(br_index, stp);
+       if (r) {
+               fprintf(stderr, "Failed to enable/disable RSTP: %s\n",
+                       CTL_error_explanation(r));
+               return -1;
+       }
+       return 0;
 }
 
 static int do_showbridge(const char *br_name)
 {
-  UID_STP_STATE_T uid_state;
-  UID_STP_CFG_T   uid_cfg;
-
-  int br_index = get_index_die(br_name, "bridge", 0);
-  if (br_index < 0)
-    return -1;
-  
-  int r = CTL_get_bridge_state(br_index, &uid_cfg, &uid_state);
-  if (r) {
-    fprintf(stderr, "Failed to get bridge state: %s\n",
-            CTL_error_explanation(r));
-    return -1;
-  }
-  
+       UID_STP_STATE_T uid_state;
+       UID_STP_CFG_T uid_cfg;
+
+       int br_index = get_index_die(br_name, "bridge", 0);
+       if (br_index < 0)
+               return -1;
+
+       int r = CTL_get_bridge_state(br_index, &uid_cfg, &uid_state);
+       if (r) {
+               fprintf(stderr, "Failed to get bridge state: %s\n",
+                       CTL_error_explanation(r));
+               return -1;
+       }
 #if 0
-  printf("Interface:       %-7s (tag:%d)    State: ",
-    uid_state.vlan_name, (int) uid_state.vlan_id);
+       printf("Interface:       %-7s (tag:%d)    State: ",
+              uid_state.vlan_name, (int)uid_state.vlan_id);
 #else
-  printf("Bridge:          %-7s               State:",
-         uid_state.vlan_name);
+       printf("Bridge:          %-7s               State:",
+              uid_state.vlan_name);
 #endif
-  switch (uid_state.stp_enabled) {
-    case STP_ENABLED:  printf("enabled\n"); break;
-    case STP_DISABLED: printf("disabled\n");break;
-    default:           printf("unknown\n"); return 0;
-  }
-
-  printf("BridgeId:        "); print_bridge_id (&uid_state.bridge_id, 0);
-  printf("     Bridge Proirity: %lu (0x%lX)\n",
-    (unsigned long) uid_state.bridge_id.prio, (unsigned long) uid_state.bridge_id.prio);
-  if (uid_cfg.force_version < 2)
-    printf("Force Version:   stp\n");
-
-  printf("Designated Root: "); print_bridge_id (&uid_state.designated_root, 1);
-  if (uid_state.root_port) {
-    printf("Root Port:       %04lx", (unsigned long) uid_state.root_port);
-    //        CLI_out_port_id (uid_state.root_port & 0xfff, False);
-    //    printf("not implemented"); // XXX
-    printf(", Root Cost:     %-lu\n", (unsigned long) uid_state.root_path_cost);
-  } else {
-    printf("Root Port:       none\n");
-  }
-
-  if (uid_state.Topo_Change)
-    printf ("Topology Change Count: %lu\n", uid_state.Topo_Change_Count);
-  else
-    printf ("Time Since Topology Change: %lu\n", uid_state.timeSince_Topo_Change);
-
-  printf ("Max Age:         %2d   Bridge Max Age:       %-2d\n",
-    (int) uid_state.max_age, (int) uid_cfg.max_age);
-  printf ("Hello Time:      %2d   Bridge Hello Time:    %-2d\n",
-    (int) uid_state.hello_time, (int) uid_cfg.hello_time);
-  printf ("Forward Delay:   %2d   Bridge Forward Delay: %-2d\n",
-    (int) uid_state.forward_delay, (int) uid_cfg.forward_delay);
-  printf ("Hold Time:       %2d\n", (int) uid_cfg.hold_time);
-
-  return 0;
+       switch (uid_state.stp_enabled) {
+       case STP_ENABLED:
+               printf("enabled\n");
+               break;
+       case STP_DISABLED:
+               printf("disabled\n");
+               break;
+       default:
+               printf("unknown\n");
+               return 0;
+       }
+
+       printf("BridgeId:        ");
+       print_bridge_id(&uid_state.bridge_id, 0);
+       printf("     Bridge Proirity: %lu (0x%lX)\n",
+              (unsigned long)uid_state.bridge_id.prio,
+              (unsigned long)uid_state.bridge_id.prio);
+       if (uid_cfg.force_version < 2)
+               printf("Force Version:   stp\n");
+
+       printf("Designated Root: ");
+       print_bridge_id(&uid_state.designated_root, 1);
+       if (uid_state.root_port) {
+               printf("Root Port:       %04lx",
+                      (unsigned long)uid_state.root_port);
+               //        CLI_out_port_id (uid_state.root_port & 0xfff, False);
+               //    printf("not implemented"); // XXX
+               printf(", Root Cost:     %-lu\n",
+                      (unsigned long)uid_state.root_path_cost);
+       } else {
+               printf("Root Port:       none\n");
+       }
+
+       if (uid_state.Topo_Change)
+               printf("Topology Change Count: %lu\n",
+                      uid_state.Topo_Change_Count);
+       else
+               printf("Time Since Topology Change: %lu\n",
+                      uid_state.timeSince_Topo_Change);
+
+       printf("Max Age:         %2d   Bridge Max Age:       %-2d\n",
+              (int)uid_state.max_age, (int)uid_cfg.max_age);
+       printf("Hello Time:      %2d   Bridge Hello Time:    %-2d\n",
+              (int)uid_state.hello_time, (int)uid_cfg.hello_time);
+       printf("Forward Delay:   %2d   Bridge Forward Delay: %-2d\n",
+              (int)uid_state.forward_delay, (int)uid_cfg.forward_delay);
+       printf("Hold Time:       %2d\n", (int)uid_cfg.hold_time);
+
+       return 0;
 }
 
 #define SYSFS_PATH_MAX 256
@@ -185,526 +208,574 @@ static int do_showbridge(const char *br_name)
 
 static int isbridge(const struct dirent *entry)
 {
-        char path[SYSFS_PATH_MAX];
-        struct stat st;
-
-        snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "/%s/bridge",
-                 entry->d_name);
-        return stat(path, &st) == 0 && S_ISDIR(st.st_mode);
-}
-
-static int cmd_showbridge(int argc, char *constargv)
-{
-  int i, count = 0;
-  int r = 0;
-  struct dirent **namelist;
-  
-  if (argc > 1) {
-    count = argc - 1;
-  }
-  else {
-    count = scandir(SYSFS_CLASS_NET, &namelist, isbridge, alphasort);
-    if (count < 0) {
-      fprintf(stderr, "Error getting list of all bridges\n");
-      return -1;
-    }
-  }
-  
-  for (i = 0; i < count; i++) {
-    const char *name;
-    if (argc > 1)
-      name = argv[i+1];
-    else
-      name = namelist[i]->d_name;
-    
-    int err = do_showbridge(name);
-    if (err)
-      r = err;
-  }
-
-  if (argc <= 1) {
-    for (i = 0; i < count; i++)
-      free(namelist[i]);
-    free(namelist);
-  }
-
-  return r;
+       char path[SYSFS_PATH_MAX];
+       struct stat st;
+
+       snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "/%s/bridge",
+                entry->d_name);
+       return stat(path, &st) == 0 && S_ISDIR(st.st_mode);
+}
+
+static int cmd_showbridge(int argc, char *const *argv)
+{
+       int i, count = 0;
+       int r = 0;
+       struct dirent **namelist;
+
+       if (argc > 1) {
+               count = argc - 1;
+       } else {
+               count =
+                   scandir(SYSFS_CLASS_NET, &namelist, isbridge, alphasort);
+               if (count < 0) {
+                       fprintf(stderr, "Error getting list of all bridges\n");
+                       return -1;
+               }
+       }
+
+       for (i = 0; i < count; i++) {
+               const char *name;
+               if (argc > 1)
+                       name = argv[i + 1];
+               else
+                       name = namelist[i]->d_name;
+
+               int err = do_showbridge(name);
+               if (err)
+                       r = err;
+       }
+
+       if (argc <= 1) {
+               for (i = 0; i < count; i++)
+                       free(namelist[i]);
+               free(namelist);
+       }
+
+       return r;
 }
 
 int detail = 0;
 
 static int do_showport(int br_index, const char *port_name,
-                         UID_STP_STATE_T *uid_state)
-{
-  UID_STP_PORT_STATE_T uid_port;
-  UID_STP_PORT_CFG_T   uid_cfg;
-  int r = 0;
-  int port_index = get_index_die(port_name, "port", 0);
-  if (port_index < 0)
-    return -1;
-
-  memset (&uid_cfg, 0, sizeof (UID_STP_PORT_CFG_T));
-  r = CTL_get_port_state(br_index, port_index, &uid_cfg, &uid_port);
-  if (r) {
-    fprintf(stderr, "Failed to get port state for port %d: %s\n",
-            port_index, CTL_error_explanation(r));
-    return -1;
-  }
-  
-  if (detail) {
-    printf("Stp Port "); CLI_out_port_id (port_index, False);
+                      UID_STP_STATE_T * uid_state)
+{
+       UID_STP_PORT_STATE_T uid_port;
+       UID_STP_PORT_CFG_T uid_cfg;
+       int r = 0;
+       int port_index = get_index_die(port_name, "port", 0);
+       if (port_index < 0)
+               return -1;
+
+       memset(&uid_cfg, 0, sizeof(UID_STP_PORT_CFG_T));
+       r = CTL_get_port_state(br_index, port_index, &uid_cfg, &uid_port);
+       if (r) {
+               fprintf(stderr, "Failed to get port state for port %d: %s\n",
+                       port_index, CTL_error_explanation(r));
+               return -1;
+       }
+
+       if (detail) {
+               printf("Stp Port ");
+               CLI_out_port_id(port_index, False);
 #if 0
-    printf(": PortId: %04lx in vlan '%s' with tag %d:\n",
-      (unsigned long) uid_port.port_id, uid_state->vlan_name, (int) uid_state->vlan_id);
+               printf(": PortId: %04lx in vlan '%s' with tag %d:\n",
+                      (unsigned long)uid_port.port_id, uid_state->vlan_name,
+                      (int)uid_state->vlan_id);
 #else
-    printf(": PortId: %04lx in Bridge '%s':\n",
-      (unsigned long) uid_port.port_id, uid_state->vlan_name);
+               printf(": PortId: %04lx in Bridge '%s':\n",
+                      (unsigned long)uid_port.port_id, uid_state->vlan_name);
 #endif
-    printf ("Priority:          %-d\n", (int) (uid_port.port_id >> 8));
-    printf ("State:             %-16s", stp_state2str (uid_port.state, 1));
-    printf ("       Uptime: %-9lu\n", uid_port.uptime);
-    printf ("PortPathCost:      admin: ");
-    if (ADMIN_PORT_PATH_COST_AUTO == uid_cfg.admin_port_path_cost)
-      printf ("%-9s", "Auto");
-    else
-      printf ("%-9lu", uid_cfg.admin_port_path_cost);
-    printf ("       oper: %-9lu\n", uid_port.oper_port_path_cost);
-
-    printf ("Point2Point:       admin: ");
-    switch (uid_cfg.admin_point2point) {
-      case P2P_FORCE_TRUE:
-        printf ("%-9s", "ForceYes");
-        break;
-      case P2P_FORCE_FALSE:
-        printf ("%-9s", "ForceNo");
-        break;
-      case P2P_AUTO:
-        printf ("%-9s", "Auto");
-        break;
-    }
-    printf ("       oper: %-9s\n", uid_port.oper_point2point ? "Yes" : "No");
-    printf ("Edge:              admin: %-9s       oper: %-9s\n",
-            uid_cfg.admin_edge ? "Y" : "N",
-            uid_port.oper_edge ? "Y" : "N");
-    printf ("Partner:                                  oper: %-9s\n",
-            uid_port.oper_stp_neigb ? "Slow" : "Rapid");
-        
-    if (' ' != uid_port.role) {
-      if ('-' != uid_port.role) {
-        printf("PathCost:          %-lu\n", (unsigned long) (uid_port.path_cost));
-        printf("Designated Root:   "); print_bridge_id (&uid_port.designated_root, 1);
-        printf("Designated Cost:   %-ld\n", (unsigned long) uid_port.designated_cost);
-        printf("Designated Bridge: "); print_bridge_id (&uid_port.designated_bridge, 1);
-        printf("Designated Port:   %-4lx\n\r", (unsigned long) uid_port.designated_port);
-      }
-      printf("Role:              ");
-      switch (uid_port.role) {
-        case 'A': printf("Alternate\n"); break;
-        case 'B': printf("Backup\n"); break;
-        case 'R': printf("Root\n"); break;
-        case 'D': printf("Designated\n"); break;
-        case '-': printf("NonStp\n"); break;
-        default:  printf("Unknown(%c)\n", uid_port.role); break;
-      }
-
-      if ('R' == uid_port.role || 'D' == uid_port.role) {
-        /* printf("Tc:                %c  ", uid_port.tc ? 'Y' : 'n'); */
-        printf("TcAck:             %c  ",
-             uid_port.top_change_ack ?  'Y' : 'N');
-        printf("TcWhile:       %3d\n", (int) uid_port.tcWhile);
-      }
-    }
-
-    if (UID_PORT_DISABLED == uid_port.state || '-' == uid_port.role) {
+               printf("Priority:          %-d\n",
+                      (int)(uid_port.port_id >> 8));
+               printf("State:             %-16s",
+                      stp_state2str(uid_port.state, 1));
+               printf("       Uptime: %-9lu\n", uid_port.uptime);
+               printf("PortPathCost:      admin: ");
+               if (ADMIN_PORT_PATH_COST_AUTO == uid_cfg.admin_port_path_cost)
+                       printf("%-9s", "Auto");
+               else
+                       printf("%-9lu", uid_cfg.admin_port_path_cost);
+               printf("       oper: %-9lu\n", uid_port.oper_port_path_cost);
+
+               printf("Point2Point:       admin: ");
+               switch (uid_cfg.admin_point2point) {
+               case P2P_FORCE_TRUE:
+                       printf("%-9s", "ForceYes");
+                       break;
+               case P2P_FORCE_FALSE:
+                       printf("%-9s", "ForceNo");
+                       break;
+               case P2P_AUTO:
+                       printf("%-9s", "Auto");
+                       break;
+               }
+               printf("       oper: %-9s\n",
+                      uid_port.oper_point2point ? "Yes" : "No");
+               printf("Edge:              admin: %-9s       oper: %-9s\n",
+                      uid_cfg.admin_edge ? "Y" : "N",
+                      uid_port.oper_edge ? "Y" : "N");
+               printf("Partner:                                  oper: %-9s\n",
+                      uid_port.oper_stp_neigb ? "Slow" : "Rapid");
+
+               if (' ' != uid_port.role) {
+                       if ('-' != uid_port.role) {
+                               printf("PathCost:          %-lu\n",
+                                      (unsigned long)(uid_port.path_cost));
+                               printf("Designated Root:   ");
+                               print_bridge_id(&uid_port.designated_root, 1);
+                               printf("Designated Cost:   %-ld\n",
+                                      (unsigned long)uid_port.designated_cost);
+                               printf("Designated Bridge: ");
+                               print_bridge_id(&uid_port.designated_bridge, 1);
+                               printf("Designated Port:   %-4lx\n\r",
+                                      (unsigned long)uid_port.designated_port);
+                       }
+                       printf("Role:              ");
+                       switch (uid_port.role) {
+                       case 'A':
+                               printf("Alternate\n");
+                               break;
+                       case 'B':
+                               printf("Backup\n");
+                               break;
+                       case 'R':
+                               printf("Root\n");
+                               break;
+                       case 'D':
+                               printf("Designated\n");
+                               break;
+                       case '-':
+                               printf("NonStp\n");
+                               break;
+                       default:
+                               printf("Unknown(%c)\n", uid_port.role);
+                               break;
+                       }
+
+                       if ('R' == uid_port.role || 'D' == uid_port.role) {
+                               /* printf("Tc:                %c  ", uid_port.tc ? 'Y' : 'n'); */
+                               printf("TcAck:             %c  ",
+                                      uid_port.top_change_ack ? 'Y' : 'N');
+                               printf("TcWhile:       %3d\n",
+                                      (int)uid_port.tcWhile);
+                       }
+               }
+
+               if (UID_PORT_DISABLED == uid_port.state || '-' == uid_port.role) {
 #if 0
-      printf("helloWhen:       %3d  ", (int) uid_port.helloWhen);
-      printf("lnkWhile:      %3d\n", (int) uid_port.lnkWhile);
-      printf("fdWhile:         %3d\n", (int) uid_port.fdWhile);
+                       printf("helloWhen:       %3d  ",
+                              (int)uid_port.helloWhen);
+                       printf("lnkWhile:      %3d\n", (int)uid_port.lnkWhile);
+                       printf("fdWhile:         %3d\n", (int)uid_port.fdWhile);
 #endif
-    } else if ('-' != uid_port.role) {
-      printf("fdWhile:         %3d  ", (int) uid_port.fdWhile);
-      printf("rcvdInfoWhile: %3d\n", (int) uid_port.rcvdInfoWhile);
-      printf("rbWhile:         %3d  ", (int) uid_port.rbWhile);
-      printf("rrWhile:       %3d\n", (int) uid_port.rrWhile);
+               } else if ('-' != uid_port.role) {
+                       printf("fdWhile:         %3d  ", (int)uid_port.fdWhile);
+                       printf("rcvdInfoWhile: %3d\n",
+                              (int)uid_port.rcvdInfoWhile);
+                       printf("rbWhile:         %3d  ", (int)uid_port.rbWhile);
+                       printf("rrWhile:       %3d\n", (int)uid_port.rrWhile);
 #if 0
-      printf("mdelayWhile:     %3d  ", (int) uid_port.mdelayWhile);
-      printf("lnkWhile:      %3d\n", (int) uid_port.lnkWhile);
-      printf("helloWhen:       %3d  ", (int) uid_port.helloWhen);
-      printf("txCount:       %3d\n", (int) uid_port.txCount);
+                       printf("mdelayWhile:     %3d  ",
+                              (int)uid_port.mdelayWhile);
+                       printf("lnkWhile:      %3d\n", (int)uid_port.lnkWhile);
+                       printf("helloWhen:       %3d  ",
+                              (int)uid_port.helloWhen);
+                       printf("txCount:       %3d\n", (int)uid_port.txCount);
 #endif
-    }
-
-    printf("RSTP BPDU rx:      %lu\n", (unsigned long) uid_port.rx_rstp_bpdu_cnt);
-    printf("CONFIG BPDU rx:    %lu\n", (unsigned long) uid_port.rx_cfg_bpdu_cnt);
-    printf("TCN BPDU rx:       %lu\n", (unsigned long) uid_port.rx_tcn_bpdu_cnt);
-  } else {
-    printf("%c%c%c  ",
-      (uid_port.oper_point2point) ? ' ' : '*',
-      (uid_port.oper_edge) ?        'E' : ' ',
-      (uid_port.oper_stp_neigb) ?   's' : ' ');
-    CLI_out_port_id (port_index, False);
-    printf(" %04lx %3s ", (unsigned long) uid_port.port_id,
-             stp_state2str (uid_port.state, 0));
-    printf (" ");
-    print_bridge_id (&uid_port.designated_root, 0);
-    printf(" ");
-    print_bridge_id (&uid_port.designated_bridge, 0);
-    printf(" %4lx %c", (unsigned long) uid_port.designated_port,  uid_port.role);
-    printf ("\n");
-  }
-  return 0;
+               }
+
+               printf("RSTP BPDU rx:      %lu\n",
+                      (unsigned long)uid_port.rx_rstp_bpdu_cnt);
+               printf("CONFIG BPDU rx:    %lu\n",
+                      (unsigned long)uid_port.rx_cfg_bpdu_cnt);
+               printf("TCN BPDU rx:       %lu\n",
+                      (unsigned long)uid_port.rx_tcn_bpdu_cnt);
+       } else {
+               printf("%c%c%c  ",
+                      (uid_port.oper_point2point) ? ' ' : '*',
+                      (uid_port.oper_edge) ? 'E' : ' ',
+                      (uid_port.oper_stp_neigb) ? 's' : ' ');
+               CLI_out_port_id(port_index, False);
+               printf(" %04lx %3s ", (unsigned long)uid_port.port_id,
+                      stp_state2str(uid_port.state, 0));
+               printf(" ");
+               print_bridge_id(&uid_port.designated_root, 0);
+               printf(" ");
+               print_bridge_id(&uid_port.designated_bridge, 0);
+               printf(" %4lx %c", (unsigned long)uid_port.designated_port,
+                      uid_port.role);
+               printf("\n");
+       }
+       return 0;
 }
 
 static int not_dot_dotdot(const struct dirent *entry)
 {
-  const char *n = entry->d_name;
-
-  return !(n[0] == '.' && (n[1] == 0 || (n[1] == '.' && n[2] == 0)));
-}
-
-static int cmd_showport(int argc, char *const* argv)
-{
-  UID_STP_STATE_T      uid_state;
-  UID_STP_CFG_T   uid_br_cfg;
-  int r = 0;
-
-  int br_index = get_index(argv[1], "bridge");
-  
-  r = CTL_get_bridge_state(br_index, &uid_br_cfg, &uid_state);
-  if (r) {
-    fprintf(stderr, "Failed to get bridge state: %s\n",
-            CTL_error_explanation(r));
-    return -1;
-  }
-
-  int i, count = 0;
-  struct dirent **namelist;
-  
-  if (argc > 2) {
-    count = argc - 2;
-  }
-  else {
-    char buf[SYSFS_PATH_MAX];
-    snprintf(buf, sizeof(buf), SYSFS_CLASS_NET "/%s/brif", argv[1]);
-    count = scandir(buf, &namelist, not_dot_dotdot, alphasort);
-    if (count < 0) {
-      fprintf(stderr, "Error getting list of all ports of bridge %s\n",
-              argv[1]);
-      return -1;
-    }
-  }
-  
-  for (i = 0; i < count; i++) {
-    const char *name;
-    if (argc > 2)
-      name = argv[i+2];
-    else
-      name = namelist[i]->d_name;
-    
-    int err = do_showport(br_index, name, &uid_state);
-    if (err)
-      r = err;
-  }
-
-  if (argc <= 2) {
-    for (i = 0; i < count; i++)
-      free(namelist[i]);
-    free(namelist);
-  }
-
-  return r;
-}
-
-static int cmd_showportdetail(int argc, char *const* argv) 
-{
-  detail = 1;
-  return cmd_showport(argc, argv);
+       const char *n = entry->d_name;
+
+       return !(n[0] == '.' && (n[1] == 0 || (n[1] == '.' && n[2] == 0)));
 }
 
-unsigned int getuint(const char *s)
+static int cmd_showport(int argc, char *const *argv)
 {
-  char *end;
-  long l;
-  l = strtoul(s, &end, 0);
-  if (*s == 0 || *end != 0 || l > INT_MAX) {
-    fprintf(stderr, "Invalid unsigned int arg %s\n", s);
-    exit(1);
-  }
-  return l;
+       UID_STP_STATE_T uid_state;
+       UID_STP_CFG_T uid_br_cfg;
+       int r = 0;
+
+       int br_index = get_index(argv[1], "bridge");
+
+       r = CTL_get_bridge_state(br_index, &uid_br_cfg, &uid_state);
+       if (r) {
+               fprintf(stderr, "Failed to get bridge state: %s\n",
+                       CTL_error_explanation(r));
+               return -1;
+       }
+
+       int i, count = 0;
+       struct dirent **namelist;
+
+       if (argc > 2) {
+               count = argc - 2;
+       } else {
+               char buf[SYSFS_PATH_MAX];
+               snprintf(buf, sizeof(buf), SYSFS_CLASS_NET "/%s/brif", argv[1]);
+               count = scandir(buf, &namelist, not_dot_dotdot, alphasort);
+               if (count < 0) {
+                       fprintf(stderr,
+                               "Error getting list of all ports of bridge %s\n",
+                               argv[1]);
+                       return -1;
+               }
+       }
+
+       for (i = 0; i < count; i++) {
+               const char *name;
+               if (argc > 2)
+                       name = argv[i + 2];
+               else
+                       name = namelist[i]->d_name;
+
+               int err = do_showport(br_index, name, &uid_state);
+               if (err)
+                       r = err;
+       }
+
+       if (argc <= 2) {
+               for (i = 0; i < count; i++)
+                       free(namelist[i]);
+               free(namelist);
+       }
+
+       return r;
 }
 
-int getenum(const char *s, const char *opt[])
+static int cmd_showportdetail(int argc, char *const *argv)
 {
-  int i;
-  for (i = 0; opt[i] != NULL; i++)
-    if (strcmp(s, opt[i]) == 0)
-      return i;
-  
-  fprintf(stderr, "Invalid argument %s: expecting one of ", s);
-  for (i = 0; opt[i] != NULL; i++)
-    fprintf(stderr, "%s%s", opt[i], (opt[i+1]?", ":"\n"));
-  
-  exit(1);
+       detail = 1;
+       return cmd_showport(argc, argv);
 }
 
-int getyesno(const char *s, const char *yes, const char *no) 
+unsigned int getuint(const char *s)
 {
-  /* Reverse yes and no so error message looks more normal */
-  const char *opt[] = { yes, no, NULL };
-  return 1 - getenum(s, opt);
+       char *end;
+       long l;
+       l = strtoul(s, &end, 0);
+       if (*s == 0 || *end != 0 || l > INT_MAX) {
+               fprintf(stderr, "Invalid unsigned int arg %s\n", s);
+               exit(1);
+       }
+       return l;
 }
 
-static int set_bridge_cfg_value (int br_index, unsigned long value,
-                                 unsigned long val_mask)
+int getenum(const char *s, const char *opt[])
 {
-  UID_STP_CFG_T uid_cfg;
-  char*         val_name;
-  int           rc;
-
-  uid_cfg.field_mask = val_mask;
-  switch (val_mask) {
-    case BR_CFG_STATE:
-      uid_cfg.stp_enabled = value;
-      val_name = "state";
-      break;
-    case BR_CFG_PRIO:
-      uid_cfg.bridge_priority = value;
-      val_name = "priority";
-      break;
-    case BR_CFG_AGE:
-      uid_cfg.max_age = value;
-      val_name = "max_age";
-      break;
-    case BR_CFG_HELLO:
-      uid_cfg.hello_time = value;
-      val_name = "hello_time";
-      break;
-    case BR_CFG_DELAY:
-      uid_cfg.forward_delay = value;
-      val_name = "forward_delay";
-      break;
-    case BR_CFG_FORCE_VER:
-      uid_cfg.force_version = value;
-      val_name = "force_version";
-      break;
-    case BR_CFG_AGE_MODE:
-    case BR_CFG_AGE_TIME:
-    default: printf ("Invalid value mask 0X%lx\n", val_mask);  return -1;
-      break;
-  }
+       int i;
+       for (i = 0; opt[i] != NULL; i++)
+               if (strcmp(s, opt[i]) == 0)
+                       return i;
+
+       fprintf(stderr, "Invalid argument %s: expecting one of ", s);
+       for (i = 0; opt[i] != NULL; i++)
+               fprintf(stderr, "%s%s", opt[i], (opt[i + 1] ? ", " : "\n"));
+
+       exit(1);
+}
+
+int getyesno(const char *s, const char *yes, const char *no)
+{
+       /* Reverse yes and no so error message looks more normal */
+       const char *opt[] = { yes, no, NULL };
+       return 1 - getenum(s, opt);
+}
+
+static int set_bridge_cfg_value(int br_index, unsigned long value,
+                               unsigned long val_mask)
+{
+       UID_STP_CFG_T uid_cfg;
+       char *val_name;
+       int rc;
+
+       uid_cfg.field_mask = val_mask;
+       switch (val_mask) {
+       case BR_CFG_STATE:
+               uid_cfg.stp_enabled = value;
+               val_name = "state";
+               break;
+       case BR_CFG_PRIO:
+               uid_cfg.bridge_priority = value;
+               val_name = "priority";
+               break;
+       case BR_CFG_AGE:
+               uid_cfg.max_age = value;
+               val_name = "max_age";
+               break;
+       case BR_CFG_HELLO:
+               uid_cfg.hello_time = value;
+               val_name = "hello_time";
+               break;
+       case BR_CFG_DELAY:
+               uid_cfg.forward_delay = value;
+               val_name = "forward_delay";
+               break;
+       case BR_CFG_FORCE_VER:
+               uid_cfg.force_version = value;
+               val_name = "force_version";
+               break;
+       case BR_CFG_AGE_MODE:
+       case BR_CFG_AGE_TIME:
+       default:
+               printf("Invalid value mask 0X%lx\n", val_mask);
+               return -1;
+               break;
+       }
 
-  rc = CTL_set_bridge_config(br_index, &uid_cfg);
+       rc = CTL_set_bridge_config(br_index, &uid_cfg);
 
-  if (0 != rc) {
-    printf ("Can't change rstp bridge %s:%s\n", val_name, STP_IN_get_error_explanation (rc));
-    return -1;
-  }
-  return 0;
+       if (0 != rc) {
+               printf("Can't change rstp bridge %s:%s\n", val_name,
+                      STP_IN_get_error_explanation(rc));
+               return -1;
+       }
+       return 0;
 }
 
-static int cmd_setbridgestate(int argc, char *const* argv) 
+static int cmd_setbridgestate(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  return set_bridge_cfg_value(br_index,
-                              getyesno(argv[2], "on", "off"),
-                              BR_CFG_STATE);
+       int br_index = get_index(argv[1], "bridge");
+       return set_bridge_cfg_value(br_index,
+                                   getyesno(argv[2], "on", "off"),
+                                   BR_CFG_STATE);
 }
 
-static int cmd_setbridgeprio(int argc, char *const* argv) 
+static int cmd_setbridgeprio(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_PRIO);
+       int br_index = get_index(argv[1], "bridge");
+       return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_PRIO);
 }
 
-static int cmd_setbridgemaxage(int argc, char *const* argv) 
+static int cmd_setbridgemaxage(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_AGE);
+       int br_index = get_index(argv[1], "bridge");
+       return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_AGE);
 }
 
-static int cmd_setbridgehello(int argc, char *const* argv) 
+static int cmd_setbridgehello(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_HELLO);
+       int br_index = get_index(argv[1], "bridge");
+       return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_HELLO);
 }
 
-static int cmd_setbridgefdelay(int argc, char *const* argv) 
+static int cmd_setbridgefdelay(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_DELAY);
+       int br_index = get_index(argv[1], "bridge");
+       return set_bridge_cfg_value(br_index, getuint(argv[2]), BR_CFG_DELAY);
 }
 
-static int cmd_setbridgeforcevers(int argc, char *const* argv) 
+static int cmd_setbridgeforcevers(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  return set_bridge_cfg_value(br_index,
-                              2 * getyesno(argv[2], "normal", "slow"),
-                              BR_CFG_FORCE_VER);
+       int br_index = get_index(argv[1], "bridge");
+       return set_bridge_cfg_value(br_index,
+                                   2 * getyesno(argv[2], "normal", "slow"),
+                                   BR_CFG_FORCE_VER);
 }
 
-
 static int
-set_port_cfg_value (int br_index, int port_index,
-                         unsigned long value,
-                         unsigned long val_mask)
-{
-  UID_STP_PORT_CFG_T uid_cfg;
-  int           rc;
-  char          *val_name;
-
-  BitmapClear(&uid_cfg.port_bmp);
-  uid_cfg.field_mask = val_mask;
-  switch (val_mask) {
-    case PT_CFG_MCHECK:
-      val_name = "mcheck";
-      break;
-    case PT_CFG_COST:
-      uid_cfg.admin_port_path_cost = value;
-      val_name = "path cost";
-      break;
-    case PT_CFG_PRIO:
-      uid_cfg.port_priority = value;
-      val_name = "priority";
-      break;
-    case PT_CFG_P2P:
-      uid_cfg.admin_point2point = (ADMIN_P2P_T) value;
-      val_name = "p2p flag";
-      break;
-    case PT_CFG_EDGE:
-      uid_cfg.admin_edge = value;
-      val_name = "adminEdge";
-      break;
-    case PT_CFG_NON_STP:
-      uid_cfg.admin_non_stp = value;
-      val_name = "adminNonStp";
-      break;
+set_port_cfg_value(int br_index, int port_index,
+                  unsigned long value, unsigned long val_mask)
+{
+       UID_STP_PORT_CFG_T uid_cfg;
+       int rc;
+       char *val_name;
+
+       BitmapClear(&uid_cfg.port_bmp);
+       uid_cfg.field_mask = val_mask;
+       switch (val_mask) {
+       case PT_CFG_MCHECK:
+               val_name = "mcheck";
+               break;
+       case PT_CFG_COST:
+               uid_cfg.admin_port_path_cost = value;
+               val_name = "path cost";
+               break;
+       case PT_CFG_PRIO:
+               uid_cfg.port_priority = value;
+               val_name = "priority";
+               break;
+       case PT_CFG_P2P:
+               uid_cfg.admin_point2point = (ADMIN_P2P_T) value;
+               val_name = "p2p flag";
+               break;
+       case PT_CFG_EDGE:
+               uid_cfg.admin_edge = value;
+               val_name = "adminEdge";
+               break;
+       case PT_CFG_NON_STP:
+               uid_cfg.admin_non_stp = value;
+               val_name = "adminNonStp";
+               break;
 #ifdef STP_DBG
-    case PT_CFG_DBG_SKIP_TX:
-      uid_cfg.skip_tx = value;
-      val_name = "skip tx";
-      break;
-    case PT_CFG_DBG_SKIP_RX:
-      uid_cfg.skip_rx = value;
-      val_name = "skip rx";
-      break;
+       case PT_CFG_DBG_SKIP_TX:
+               uid_cfg.skip_tx = value;
+               val_name = "skip tx";
+               break;
+       case PT_CFG_DBG_SKIP_RX:
+               uid_cfg.skip_rx = value;
+               val_name = "skip rx";
+               break;
 #endif
-    case PT_CFG_STATE:
-    default:
-      printf ("Invalid value mask 0X%lx\n", val_mask);
-      return -1;
-  }
+       case PT_CFG_STATE:
+       default:
+               printf("Invalid value mask 0X%lx\n", val_mask);
+               return -1;
+       }
 
-  rc = CTL_set_port_config(br_index, port_index, &uid_cfg);
+       rc = CTL_set_port_config(br_index, port_index, &uid_cfg);
 
-  if (0 != rc) {
-    printf ("can't change rstp port[s] %s: %s\n",
-           val_name, STP_IN_get_error_explanation (rc));
-    return -1;
-  }
-  return 0;
+       if (0 != rc) {
+               printf("can't change rstp port[s] %s: %s\n",
+                      val_name, STP_IN_get_error_explanation(rc));
+               return -1;
+       }
+       return 0;
 }
 
-static int cmd_setportprio(int argc, char *const* argv) 
+static int cmd_setportprio(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  int port_index = get_index(argv[2], "port");
-  return set_port_cfg_value(br_index, port_index,
-                            getuint(argv[3]), PT_CFG_PRIO);
+       int br_index = get_index(argv[1], "bridge");
+       int port_index = get_index(argv[2], "port");
+       return set_port_cfg_value(br_index, port_index,
+                                 getuint(argv[3]), PT_CFG_PRIO);
 }
 
-static int cmd_setportpathcost(int argc, char *const* argv) 
+static int cmd_setportpathcost(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  int port_index = get_index(argv[2], "port");
-  return set_port_cfg_value(br_index, port_index,
-                            getuint(argv[3]), PT_CFG_COST);
+       int br_index = get_index(argv[1], "bridge");
+       int port_index = get_index(argv[2], "port");
+       return set_port_cfg_value(br_index, port_index,
+                                 getuint(argv[3]), PT_CFG_COST);
 }
 
-static int cmd_setportedge(int argc, char *const* argv) 
+static int cmd_setportedge(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  int port_index = get_index(argv[2], "port");
-  return set_port_cfg_value(br_index, port_index,
-                            getyesno(argv[3], "yes", "no"), PT_CFG_EDGE);
+       int br_index = get_index(argv[1], "bridge");
+       int port_index = get_index(argv[2], "port");
+       return set_port_cfg_value(br_index, port_index,
+                                 getyesno(argv[3], "yes", "no"), PT_CFG_EDGE);
 }
 
-static int cmd_setportnonstp(int argc, char *const* argv) 
+static int cmd_setportnonstp(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  int port_index = get_index(argv[2], "port");
-  return set_port_cfg_value(br_index, port_index,
-                            getyesno(argv[3], "yes", "no"), PT_CFG_NON_STP);
+       int br_index = get_index(argv[1], "bridge");
+       int port_index = get_index(argv[2], "port");
+       return set_port_cfg_value(br_index, port_index,
+                                 getyesno(argv[3], "yes", "no"),
+                                 PT_CFG_NON_STP);
 }
 
-static int cmd_setportp2p(int argc, char *const* argv) 
+static int cmd_setportp2p(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  int port_index = get_index(argv[2], "port");
-  const char *opts[] = {"yes", "no", "auto", NULL };
-  int vals[] = { P2P_FORCE_TRUE, P2P_FORCE_FALSE, P2P_AUTO };
+       int br_index = get_index(argv[1], "bridge");
+       int port_index = get_index(argv[2], "port");
+       const char *opts[] = { "yes", "no", "auto", NULL };
+       int vals[] = { P2P_FORCE_TRUE, P2P_FORCE_FALSE, P2P_AUTO };
 
-  return set_port_cfg_value(br_index, port_index,
-                            vals[getenum(argv[3], opts)], PT_CFG_P2P);
+       return set_port_cfg_value(br_index, port_index,
+                                 vals[getenum(argv[3], opts)], PT_CFG_P2P);
 }
 
-static int cmd_portmcheck(int argc, char *const* argv) 
+static int cmd_portmcheck(int argc, char *const *argv)
 {
 
-  int br_index = get_index(argv[1], "bridge");
-  int port_index = get_index(argv[2], "port");
-  return set_port_cfg_value(br_index, port_index, 0, PT_CFG_MCHECK);
+       int br_index = get_index(argv[1], "bridge");
+       int port_index = get_index(argv[2], "port");
+       return set_port_cfg_value(br_index, port_index, 0, PT_CFG_MCHECK);
 }
 
-static int cmd_debuglevel(int argc, char *const* argv) 
+static int cmd_debuglevel(int argc, char *const *argv)
 {
-  return CTL_set_debug_level(getuint(argv[1]));
+       return CTL_set_debug_level(getuint(argv[1]));
 }
 
-struct command
-{
-        int             nargs;
-        int             optargs;
-        const char      *name;
-        int             (*func)(int argc, char *const* argv);
-        const char      *help;
+struct command {
+       int nargs;
+       int optargs;
+       const char *name;
+       int (*func) (int argc, char *const *argv);
+       const char *help;
 };
 
 static const struct command commands[] = {
-       { 0, 32, "showbridge", cmd_showbridge, "[<bridge> ... ]\t\tshow bridge state" },
-       { 1, 32, "showport", cmd_showport, "<bridge> [<port> ... ]\tshow port state" },
-       { 1, 32, "showportdetail", cmd_showportdetail, "<bridge> [<port> ... ]\tshow port state (detail)" },
-       { 2, 0, "rstp", cmd_rstp, "<bridge> {on|off}\tenable/disable rstpd control" },
-        { 2, 0, "setbridgestate",  cmd_setbridgestate, "<bridge> {on|off}\tstart/stop rstp (when enabled)" },
-        { 2, 0, "setbridgeprio",  cmd_setbridgeprio, "<bridge> <priority>\tset bridge priority (0-61440)" },
-        { 2, 0, "sethello", cmd_setbridgehello, "<bridge> <hellotime>\tset bridge hello time (1-10)" },
-        { 2, 0, "setmaxage",  cmd_setbridgemaxage, "<bridge> <maxage>\tset bridge max age (6-40)" },
-        { 2, 0, "setfdelay",  cmd_setbridgefdelay, "<bridge> <fwd_delay>\tset bridge forward delay (4-30)" },
-        { 2, 0, "setforcevers",  cmd_setbridgeforcevers, "<bridge> {normal|slow}\tnormal RSTP or force to STP" },
-       { 3, 0, "setportprio", cmd_setportprio, "<bridge> <port> <priority>\tset port priority (0-240)" },
-       { 3, 0, "setportpathcost", cmd_setportpathcost, "<bridge> <port> <cost>\tset port path cost" },
-       { 3, 0, "setportedge", cmd_setportedge, "<bridge> <port> {yes|no}\tconfigure if it is an edge port" },
-       { 3, 0, "setportnonstp", cmd_setportnonstp, "<bridge> <port> {yes|no}\tdisable STP for the port" },
-       { 3, 0, "setportp2p", cmd_setportp2p, "<bridge> <port> {yes|no|auto}\tset whether p2p connection" },
-       { 2, 0, "portmcheck", cmd_portmcheck, "<bridge> <port>\ttry to get back from STP to RSTP mode" },
-       { 1, 0, "debuglevel", cmd_debuglevel, "<level>\t\tLevel of verbosity" },
+       {0, 32, "showbridge", cmd_showbridge,
+        "[<bridge> ... ]\t\tshow bridge state"},
+       {1, 32, "showport", cmd_showport,
+        "<bridge> [<port> ... ]\tshow port state"},
+       {1, 32, "showportdetail", cmd_showportdetail,
+        "<bridge> [<port> ... ]\tshow port state (detail)"},
+       {2, 0, "rstp", cmd_rstp,
+        "<bridge> {on|off}\tenable/disable rstpd control"},
+       {2, 0, "setbridgestate", cmd_setbridgestate,
+        "<bridge> {on|off}\tstart/stop rstp (when enabled)"},
+       {2, 0, "setbridgeprio", cmd_setbridgeprio,
+        "<bridge> <priority>\tset bridge priority (0-61440)"},
+       {2, 0, "sethello", cmd_setbridgehello,
+        "<bridge> <hellotime>\tset bridge hello time (1-10)"},
+       {2, 0, "setmaxage", cmd_setbridgemaxage,
+        "<bridge> <maxage>\tset bridge max age (6-40)"},
+       {2, 0, "setfdelay", cmd_setbridgefdelay,
+        "<bridge> <fwd_delay>\tset bridge forward delay (4-30)"},
+       {2, 0, "setforcevers", cmd_setbridgeforcevers,
+        "<bridge> {normal|slow}\tnormal RSTP or force to STP"},
+       {3, 0, "setportprio", cmd_setportprio,
+        "<bridge> <port> <priority>\tset port priority (0-240)"},
+       {3, 0, "setportpathcost", cmd_setportpathcost,
+        "<bridge> <port> <cost>\tset port path cost"},
+       {3, 0, "setportedge", cmd_setportedge,
+        "<bridge> <port> {yes|no}\tconfigure if it is an edge port"},
+       {3, 0, "setportnonstp", cmd_setportnonstp,
+        "<bridge> <port> {yes|no}\tdisable STP for the port"},
+       {3, 0, "setportp2p", cmd_setportp2p,
+        "<bridge> <port> {yes|no|auto}\tset whether p2p connection"},
+       {2, 0, "portmcheck", cmd_portmcheck,
+        "<bridge> <port>\ttry to get back from STP to RSTP mode"},
+       {1, 0, "debuglevel", cmd_debuglevel, "<level>\t\tLevel of verbosity"},
 };
 
 const struct command *command_lookup(const char *cmd)
 {
        int i;
 
-       for (i = 0; i < sizeof(commands)/sizeof(commands[0]); i++) {
+       for (i = 0; i < sizeof(commands) / sizeof(commands[0]); i++) {
                if (!strcmp(cmd, commands[i].name))
                        return &commands[i];
        }
@@ -716,7 +787,7 @@ void command_helpall(void)
 {
        int i;
 
-       for (i = 0; i < sizeof(commands)/sizeof(commands[0]); i++) {
+       for (i = 0; i < sizeof(commands) / sizeof(commands[0]); i++) {
                printf("\t%-10s\t%s\n", commands[i].name, commands[i].help);
        }
 }
@@ -731,18 +802,18 @@ static void help()
 #define PACKAGE_VERSION2(v, b) "rstp, " #v "-" #b
 #define PACKAGE_VERSION(v, b) PACKAGE_VERSION2(v, b)
 
-int main(int argc, char *constargv)
+int main(int argc, char *const *argv)
 {
        const struct command *cmd;
        int f;
        static const struct option options[] = {
-               { .name = "help", .val = 'h' },
-               { .name = "version", .val = 'V' },
-               { 0 }
+               {.name = "help",.val = 'h'},
+               {.name = "version",.val = 'V'},
+               {0}
        };
 
-       while ((f = getopt_long(argc, argv, "Vh", options, NULL)) != EOF) 
-               switch(f) {
+       while ((f = getopt_long(argc, argv, "Vh", options, NULL)) != EOF)
+               switch (f) {
                case 'h':
                        help();
                        return 0;
@@ -753,10 +824,10 @@ int main(int argc, char *const* argv)
                        fprintf(stderr, "Unknown option '%c'\n", f);
                        goto help;
                }
-                       
+
        if (argc == optind)
                goto help;
-       
+
        if (ctl_client_init()) {
                fprintf(stderr, "can't setup control connection\n");
                return 1;
@@ -768,7 +839,7 @@ int main(int argc, char *const* argv)
                fprintf(stderr, "never heard of command [%s]\n", argv[0]);
                goto help;
        }
-       
+
        if (argc < cmd->nargs + 1 || argc > cmd->nargs + cmd->optargs + 1) {
                printf("Incorrect number of arguments for command\n");
                printf("Usage: rstpctl %s %s\n", cmd->name, cmd->help);
@@ -777,7 +848,7 @@ int main(int argc, char *const* argv)
 
        return cmd->func(argc, argv);
 
-help:
+      help:
        help();
        return 1;
 }