diff options
| -rw-r--r-- | babeld/babel_zebra.c | 74 | 
1 files changed, 27 insertions, 47 deletions
| diff --git a/babeld/babel_zebra.c b/babeld/babel_zebra.c index e68c2b70..1890291d 100644 --- a/babeld/babel_zebra.c +++ b/babeld/babel_zebra.c @@ -54,19 +54,6 @@ void babelz_zebra_init(void);  /* we must use a pointer because of zclient.c's functions (new, free). */  struct zclient *zclient;  static int zebra_config_write (struct vty *vty); -/* Redistribution types */ -static struct { -    int type; -    int str_min_len; -    const char *str; -} redist_type[] = { -    {ZEBRA_ROUTE_KERNEL,  1, "kernel"}, -    {ZEBRA_ROUTE_CONNECT, 1, "connected"}, -    {ZEBRA_ROUTE_STATIC,  1, "static"}, -    {ZEBRA_ROUTE_OSPF6,   1, "ospf6"}, -    {ZEBRA_ROUTE_BGP,     1, "bgp"}, -    {0, 0, NULL} -};  /* Debug types */  static struct { @@ -219,54 +206,47 @@ babel_redistribute_unset (int type)  /* [Babel Command] */  DEFUN (babel_redistribute_type,         babel_redistribute_type_cmd, -       "redistribute (kernel|connected|static|ospf6|bgp)", -       "Redistribute information from another routing protocol\n" -       "Kernel routes\n" -       "Connected\n" -       "Static routes\n" -       "Open Shortest Path First (OSPFv3)\n" -       "Border Gateway Protocol (BGP)\n") +       "redistribute " QUAGGA_REDIST_STR_BABELD, +       "Redistribute\n" +       QUAGGA_REDIST_HELP_STR_BABELD)  { -    int i; +    int type; -    for(i = 0; redist_type[i].str != NULL; i++) { -        if (strncmp (redist_type[i].str, argv[0], -                     redist_type[i].str_min_len) == 0) { -            zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, -                                  redist_type[i].type); -            return CMD_SUCCESS; -        } -    } +    type = proto_redistnum(AFI_IP6, argv[0]); -    vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE); +    if (type < 0) +        type = proto_redistnum(AFI_IP, argv[0]); -    return CMD_WARNING; +    if (type < 0) { +        vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE); +        return CMD_WARNING; +    } + +    zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type); +    return CMD_SUCCESS;  }  /* [Babel Command] */  DEFUN (no_babel_redistribute_type,         no_babel_redistribute_type_cmd, -       "no redistribute (kernel|connected|static|ospf6|bgp)", +       "no redistribute " QUAGGA_REDIST_STR_BABELD,         NO_STR -       "Redistribute information from another routing protocol\n" -       "Kernel routes\n" -       "Connected\n" -       "Static routes\n" -       "Open Shortest Path First (OSPFv3)\n" -       "Border Gateway Protocol (BGP)\n") +       "Redistribute\n" +       QUAGGA_REDIST_HELP_STR_BABELD)  { -    int i; +    int type; -    for (i = 0; redist_type[i].str; i++) { -        if (strncmp(redist_type[i].str, argv[0], -                    redist_type[i].str_min_len) == 0) { -            return babel_redistribute_unset (redist_type[i].type); -        } -    } +    type = proto_redistnum(AFI_IP6, argv[0]); -    vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE); +    if (type < 0) +        type = proto_redistnum(AFI_IP, argv[0]); -    return CMD_WARNING; +    if (type < 0) { +        vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE); +        return CMD_WARNING; +    } + +    return babel_redistribute_unset (type);  }  #ifndef NO_DEBUG | 
