summaryrefslogtreecommitdiff
path: root/zebra/irdp_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/irdp_interface.c')
-rw-r--r--zebra/irdp_interface.c161
1 files changed, 91 insertions, 70 deletions
diff --git a/zebra/irdp_interface.c b/zebra/irdp_interface.c
index 9d8c2e67bf..5cabe7e62f 100644
--- a/zebra/irdp_interface.c
+++ b/zebra/irdp_interface.c
@@ -18,17 +18,17 @@
* You should have received a copy of the GNU General Public License
* along with GNU Zebra; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * 02111-1307, USA.
*/
-/*
+/*
* This work includes work with the following copywrite:
*
* Copyright (C) 1997, 2000 Kunihiro Ishiguro
*
*/
-/*
+/*
* Thanks to Jens Låås at Swedish University of Agricultural Sciences
* for reviewing and tests.
*/
@@ -36,7 +36,7 @@
#include <zebra.h>
-#ifdef HAVE_IRDP
+#ifdef HAVE_IRDP
#include "if.h"
#include "vty.h"
@@ -81,7 +81,7 @@ irdp_get_prefix(struct interface *ifp)
{
struct listnode *node;
struct connected *ifc;
-
+
if (ifp->connected)
for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, ifc))
return ifc->address;
@@ -91,9 +91,9 @@ irdp_get_prefix(struct interface *ifp)
/* Join to the add/leave multicast group. */
static int
-if_group (struct interface *ifp,
- int sock,
- u_int32_t group,
+if_group (struct interface *ifp,
+ int sock,
+ u_int32_t group,
int add_leave)
{
struct ip_mreq m;
@@ -116,7 +116,7 @@ if_group (struct interface *ifp,
(char *) &m, sizeof (struct ip_mreq));
if (ret < 0)
zlog_warn ("IRDP: %s can't setsockopt %s: %s",
- add_leave == IP_ADD_MEMBERSHIP? "join group":"leave group",
+ add_leave == IP_ADD_MEMBERSHIP? "join group":"leave group",
inet_2a(group, b1),
safe_strerror (errno));
@@ -137,7 +137,7 @@ if_add_group (struct interface *ifp)
}
if(irdp->flags & IF_DEBUG_MISC )
- zlog_debug("IRDP: Adding group %s for %s",
+ zlog_debug("IRDP: Adding group %s for %s",
inet_2a(htonl(INADDR_ALLRTRS_GROUP), b1),
ifp->name);
return 0;
@@ -156,7 +156,7 @@ if_drop_group (struct interface *ifp)
return ret;
if(irdp->flags & IF_DEBUG_MISC)
- zlog_debug("IRDP: Leaving group %s for %s",
+ zlog_debug("IRDP: Leaving group %s for %s",
inet_2a(htonl(INADDR_ALLRTRS_GROUP), b1),
ifp->name);
return 0;
@@ -206,7 +206,7 @@ irdp_if_start(struct interface *ifp, int multicast, int set_defaults)
}
irdp->flags |= IF_ACTIVE;
- if(!multicast)
+ if(!multicast)
irdp->flags |= IF_BROADCAST;
if_add_update(ifp);
@@ -219,13 +219,13 @@ irdp_if_start(struct interface *ifp, int multicast, int set_defaults)
if( multicast) {
if_add_group(ifp);
-
+
if (! (ifp->flags & (IFF_MULTICAST|IFF_ALLMULTI))) {
zlog_warn("IRDP: Interface not multicast enabled %s", ifp->name);
}
}
- if(set_defaults)
+ if(set_defaults)
if_set_defaults(ifp);
irdp->irdp_sent = 0;
@@ -239,9 +239,9 @@ irdp_if_start(struct interface *ifp, int multicast, int set_defaults)
seed = ifc->address->u.prefix4.s_addr;
break;
}
-
+
srandom(seed);
- timer = (random () % IRDP_DEFAULT_INTERVAL) + 1;
+ timer = (random () % IRDP_DEFAULT_INTERVAL) + 1;
irdp->AdvPrefList = list_new();
irdp->AdvPrefList->del = (void (*)(void *)) Adv_free; /* Destructor */
@@ -250,18 +250,18 @@ irdp_if_start(struct interface *ifp, int multicast, int set_defaults)
/* And this for startup. Speed limit from 1991 :-). But it's OK*/
if(irdp->irdp_sent < MAX_INITIAL_ADVERTISEMENTS &&
- timer > MAX_INITIAL_ADVERT_INTERVAL )
+ timer > MAX_INITIAL_ADVERT_INTERVAL )
timer= MAX_INITIAL_ADVERT_INTERVAL;
-
+
if(irdp->flags & IF_DEBUG_MISC)
- zlog_debug("IRDP: Init timer for %s set to %u",
- ifp->name,
+ zlog_debug("IRDP: Init timer for %s set to %u",
+ ifp->name,
timer);
- irdp->t_advertise = thread_add_timer(zebrad.master,
- irdp_send_thread,
- ifp,
+ irdp->t_advertise = thread_add_timer(zebrad.master,
+ irdp_send_thread,
+ ifp,
timer);
}
@@ -270,7 +270,7 @@ irdp_if_stop(struct interface *ifp)
{
struct zebra_if *zi=ifp->info;
struct irdp_interface *irdp=&zi->irdp;
-
+
if (irdp == NULL) {
zlog_warn ("Interface %s structure is NULL", ifp->name);
return;
@@ -281,7 +281,7 @@ irdp_if_stop(struct interface *ifp)
return;
}
- if(! (irdp->flags & IF_BROADCAST))
+ if(! (irdp->flags & IF_BROADCAST))
if_drop_group(ifp);
irdp_advert_off(ifp);
@@ -307,9 +307,9 @@ irdp_if_shutdown(struct interface *ifp)
irdp->flags |= IF_SHUTDOWN;
irdp->flags &= ~IF_ACTIVE;
- if(! (irdp->flags & IF_BROADCAST))
+ if(! (irdp->flags & IF_BROADCAST))
if_drop_group(ifp);
-
+
/* Tell the hosts we are out of service */
irdp_advert_off(ifp);
}
@@ -327,7 +327,7 @@ irdp_if_no_shutdown(struct interface *ifp)
irdp->flags &= ~IF_SHUTDOWN;
- irdp_if_start(ifp, irdp->flags & IF_BROADCAST? FALSE : TRUE, FALSE);
+ irdp_if_start(ifp, irdp->flags & IF_BROADCAST? FALSE : TRUE, FALSE);
}
@@ -344,30 +344,30 @@ void irdp_config_write (struct vty *vty, struct interface *ifp)
if(irdp->flags & IF_ACTIVE || irdp->flags & IF_SHUTDOWN) {
- if( irdp->flags & IF_SHUTDOWN)
+ if( irdp->flags & IF_SHUTDOWN)
vty_out (vty, " ip irdp shutdown %s", VTY_NEWLINE);
- if( irdp->flags & IF_BROADCAST)
+ if( irdp->flags & IF_BROADCAST)
vty_out (vty, " ip irdp broadcast%s", VTY_NEWLINE);
- else
+ else
vty_out (vty, " ip irdp multicast%s", VTY_NEWLINE);
- vty_out (vty, " ip irdp preference %ld%s",
+ vty_out (vty, " ip irdp preference %ld%s",
irdp->Preference, VTY_NEWLINE);
for (ALL_LIST_ELEMENTS_RO (irdp->AdvPrefList, node, adv))
vty_out (vty, " ip irdp address %s preference %d%s",
inet_2a(adv->ip.s_addr, b1),
- adv->pref,
+ adv->pref,
VTY_NEWLINE);
- vty_out (vty, " ip irdp holdtime %d%s",
+ vty_out (vty, " ip irdp holdtime %d%s",
irdp->Lifetime, VTY_NEWLINE);
- vty_out (vty, " ip irdp minadvertinterval %ld%s",
+ vty_out (vty, " ip irdp minadvertinterval %ld%s",
irdp->MinAdvertInterval, VTY_NEWLINE);
- vty_out (vty, " ip irdp maxadvertinterval %ld%s",
+ vty_out (vty, " ip irdp maxadvertinterval %ld%s",
irdp->MaxAdvertInterval, VTY_NEWLINE);
}
@@ -378,7 +378,8 @@ DEFUN (ip_irdp_multicast,
ip_irdp_multicast_cmd,
"ip irdp multicast",
IP_STR
- "ICMP Router discovery on this interface using multicast\n")
+ "ICMP Router discovery on this interface\n"
+ "Use multicast mode\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
@@ -390,7 +391,8 @@ DEFUN (ip_irdp_broadcast,
ip_irdp_broadcast_cmd,
"ip irdp broadcast",
IP_STR
- "ICMP Router discovery on this interface using broadcast\n")
+ "ICMP Router discovery on this interface\n"
+ "Use broadcast mode\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
@@ -415,6 +417,7 @@ DEFUN (ip_irdp_shutdown,
ip_irdp_shutdown_cmd,
"ip irdp shutdown",
IP_STR
+ "ICMP Router discovery on this interface\n"
"ICMP Router discovery shutdown on this interface\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
@@ -428,6 +431,7 @@ DEFUN (no_ip_irdp_shutdown,
"no ip irdp shutdown",
NO_STR
IP_STR
+ "ICMP Router discovery on this interface\n"
"ICMP Router discovery no shutdown on this interface\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
@@ -438,12 +442,13 @@ DEFUN (no_ip_irdp_shutdown,
DEFUN (ip_irdp_holdtime,
ip_irdp_holdtime_cmd,
- "ip irdp holdtime <0-9000>",
+ "ip irdp holdtime (0-9000)",
IP_STR
"ICMP Router discovery on this interface\n"
"Set holdtime value\n"
"Holdtime value in seconds. Default is 1800 seconds\n")
{
+ int idx_number = 3;
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
struct irdp_interface *irdp;
@@ -451,18 +456,19 @@ DEFUN (ip_irdp_holdtime,
zi=ifp->info;
irdp=&zi->irdp;
- irdp->Lifetime = atoi(argv[0]);
+ irdp->Lifetime = atoi(argv[idx_number]->arg);
return CMD_SUCCESS;
}
DEFUN (ip_irdp_minadvertinterval,
ip_irdp_minadvertinterval_cmd,
- "ip irdp minadvertinterval <3-1800>",
+ "ip irdp minadvertinterval (3-1800)",
IP_STR
"ICMP Router discovery on this interface\n"
"Set minimum time between advertisement\n"
"Minimum advertisement interval in seconds\n")
{
+ int idx_number = 3;
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
struct irdp_interface *irdp;
@@ -470,28 +476,29 @@ DEFUN (ip_irdp_minadvertinterval,
zi=ifp->info;
irdp=&zi->irdp;
- if( (unsigned) atoi(argv[0]) <= irdp->MaxAdvertInterval) {
- irdp->MinAdvertInterval = atoi(argv[0]);
+ if( (unsigned) atoi(argv[idx_number]->arg) <= irdp->MaxAdvertInterval) {
+ irdp->MinAdvertInterval = atoi(argv[idx_number]->arg);
return CMD_SUCCESS;
}
- vty_out (vty, "ICMP warning maxadvertinterval is greater or equal than minadvertinterval%s",
+ vty_out (vty, "ICMP warning maxadvertinterval is greater or equal than minadvertinterval%s",
VTY_NEWLINE);
- vty_out (vty, "Please correct!%s",
+ vty_out (vty, "Please correct!%s",
VTY_NEWLINE);
return CMD_WARNING;
}
DEFUN (ip_irdp_maxadvertinterval,
ip_irdp_maxadvertinterval_cmd,
- "ip irdp maxadvertinterval <4-1800>",
+ "ip irdp maxadvertinterval (4-1800)",
IP_STR
"ICMP Router discovery on this interface\n"
"Set maximum time between advertisement\n"
"Maximum advertisement interval in seconds\n")
{
+ int idx_number = 3;
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
struct irdp_interface *irdp;
@@ -500,16 +507,16 @@ DEFUN (ip_irdp_maxadvertinterval,
irdp=&zi->irdp;
- if( irdp->MinAdvertInterval <= (unsigned) atoi(argv[0]) ) {
- irdp->MaxAdvertInterval = atoi(argv[0]);
+ if( irdp->MinAdvertInterval <= (unsigned) atoi(argv[idx_number]->arg) ) {
+ irdp->MaxAdvertInterval = atoi(argv[idx_number]->arg);
return CMD_SUCCESS;
}
- vty_out (vty, "ICMP warning maxadvertinterval is greater or equal than minadvertinterval%s",
+ vty_out (vty, "ICMP warning maxadvertinterval is greater or equal than minadvertinterval%s",
VTY_NEWLINE);
- vty_out (vty, "Please correct!%s",
+ vty_out (vty, "Please correct!%s",
VTY_NEWLINE);
return CMD_WARNING;
}
@@ -521,12 +528,13 @@ DEFUN (ip_irdp_maxadvertinterval,
DEFUN (ip_irdp_preference,
ip_irdp_preference_cmd,
- "ip irdp preference <0-2147483647>",
+ "ip irdp preference (0-2147483647)",
IP_STR
"ICMP Router discovery on this interface\n"
"Set default preference level for this interface\n"
"Preference level\n")
{
+ int idx_number = 3;
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
struct irdp_interface *irdp;
@@ -534,22 +542,25 @@ DEFUN (ip_irdp_preference,
zi=ifp->info;
irdp=&zi->irdp;
- irdp->Preference = atoi(argv[0]);
+ irdp->Preference = atoi(argv[idx_number]->arg);
return CMD_SUCCESS;
}
DEFUN (ip_irdp_address_preference,
ip_irdp_address_preference_cmd,
- "ip irdp address A.B.C.D preference <0-2147483647>",
+ "ip irdp address A.B.C.D preference (0-2147483647)",
IP_STR
- "Alter ICMP Router discovery preference this interface\n"
- "Specify IRDP non-default preference to advertise\n"
+ "Alter ICMP Router discovery preference on this interface\n"
"Set IRDP address for advertise\n"
+ "IPv4 address\n"
+ "Specify IRDP non-default preference to advertise\n"
"Preference level\n")
{
+ int idx_ipv4 = 3;
+ int idx_number = 5;
VTY_DECLVAR_CONTEXT (interface, ifp);
struct listnode *node;
- struct in_addr ip;
+ struct in_addr ip;
int pref;
int ret;
struct zebra_if *zi;
@@ -559,13 +570,13 @@ DEFUN (ip_irdp_address_preference,
zi=ifp->info;
irdp=&zi->irdp;
- ret = inet_aton(argv[0], &ip);
+ ret = inet_aton(argv[idx_ipv4]->arg, &ip);
if(!ret) return CMD_WARNING;
- pref = atoi(argv[1]);
+ pref = atoi(argv[idx_number]->arg);
for (ALL_LIST_ELEMENTS_RO (irdp->AdvPrefList, node, adv))
- if(adv->ip.s_addr == ip.s_addr)
+ if(adv->ip.s_addr == ip.s_addr)
return CMD_SUCCESS;
adv = Adv_new();
@@ -579,17 +590,19 @@ DEFUN (ip_irdp_address_preference,
DEFUN (no_ip_irdp_address_preference,
no_ip_irdp_address_preference_cmd,
- "no ip irdp address A.B.C.D preference <0-2147483647>",
+ "no ip irdp address A.B.C.D preference (0-2147483647)",
NO_STR
IP_STR
- "Alter ICMP Router discovery preference this interface\n"
- "Removes IRDP non-default preference\n"
+ "Alter ICMP Router discovery preference on this interface\n"
"Select IRDP address\n"
+ "IPv4 address\n"
+ "Reset ICMP Router discovery preference on this interface\n"
"Old preference level\n")
{
+ int idx_ipv4 = 4;
VTY_DECLVAR_CONTEXT (interface, ifp);
struct listnode *node, *nnode;
- struct in_addr ip;
+ struct in_addr ip;
int ret;
struct zebra_if *zi;
struct irdp_interface *irdp;
@@ -598,8 +611,8 @@ DEFUN (no_ip_irdp_address_preference,
zi=ifp->info;
irdp=&zi->irdp;
- ret = inet_aton(argv[0], &ip);
- if (!ret)
+ ret = inet_aton(argv[idx_ipv4]->arg, &ip);
+ if (!ret)
return CMD_WARNING;
for (ALL_LIST_ELEMENTS (irdp->AdvPrefList, node, nnode, adv))
@@ -610,7 +623,7 @@ DEFUN (no_ip_irdp_address_preference,
break;
}
}
-
+
return CMD_SUCCESS;
}
@@ -618,7 +631,9 @@ DEFUN (ip_irdp_debug_messages,
ip_irdp_debug_messages_cmd,
"ip irdp debug messages",
IP_STR
- "ICMP Router discovery debug Averts. and Solicits (short)\n")
+ "ICMP Router discovery debug Averts. and Solicits (short)\n"
+ "IRDP debugging options\n"
+ "Enable debugging for IRDP messages\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
@@ -636,7 +651,9 @@ DEFUN (ip_irdp_debug_misc,
ip_irdp_debug_misc_cmd,
"ip irdp debug misc",
IP_STR
- "ICMP Router discovery debug Averts. and Solicits (short)\n")
+ "ICMP Router discovery debug Averts. and Solicits (short)\n"
+ "IRDP debugging options\n"
+ "Enable debugging for miscellaneous IRDP events\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
@@ -654,7 +671,9 @@ DEFUN (ip_irdp_debug_packet,
ip_irdp_debug_packet_cmd,
"ip irdp debug packet",
IP_STR
- "ICMP Router discovery debug Averts. and Solicits (short)\n")
+ "ICMP Router discovery debug Averts. and Solicits (short)\n"
+ "IRDP debugging options\n"
+ "Enable debugging for IRDP packets\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;
@@ -673,7 +692,9 @@ DEFUN (ip_irdp_debug_disable,
ip_irdp_debug_disable_cmd,
"ip irdp debug disable",
IP_STR
- "ICMP Router discovery debug Averts. and Solicits (short)\n")
+ "ICMP Router discovery debug Averts. and Solicits (short)\n"
+ "IRDP debugging options\n"
+ "Disable debugging for all IRDP events\n")
{
VTY_DECLVAR_CONTEXT (interface, ifp);
struct zebra_if *zi;