From 435408866187f3bc3c49b26f11bc83c374e55dd5 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Tue, 28 Nov 2006 16:36:39 +0000 Subject: [ospfd] Fix bug in passive-interface default commands. 2006-11-28 Andrew J. Schorr * ospf_vty.c: (ospf_passive_interface_default) Take additional 'newval' arg so we can update ospf->passive_interface_default inside this function. More importantly, we now call ospf_if_set_multicast on all ospf_interfaces. (ospf_passive_interface, no_ospf_passive_interface) Fix bug: for 'default' case, argv[0] is undefined, so we must test for (argc == 0) before using argv[0]. And since ospf_passive_interface_default now calls ospf_if_set_multicast as needed, we can just return after calling ospf_passive_interface_default. --- ospfd/ChangeLog | 13 +++++++++ ospfd/ospf_vty.c | 86 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 56 insertions(+), 43 deletions(-) diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index d2b979aa..42345bdb 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,16 @@ +2006-11-28 Andrew J. Schorr + + * ospf_vty.c: (ospf_passive_interface_default) Take additional + 'newval' arg so we can update ospf->passive_interface_default inside + this function. More importantly, we now call ospf_if_set_multicast + on all ospf_interfaces. + (ospf_passive_interface, no_ospf_passive_interface) Fix bug: + for 'default' case, argv[0] is undefined, so we must test for + (argc == 0) before using argv[0]. And since + ospf_passive_interface_default now calls ospf_if_set_multicast as + needed, we can just return after calling + ospf_passive_interface_default. + 2006-10-24 Andrew J. Schorr * ospf_zebra.c: (ospf_redistribute_default_set) Fix bug where diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 0e3a77d8..d6da11dc 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -250,12 +250,14 @@ ALIAS (no_ospf_router_id, "router-id for the OSPF process\n") static void -ospf_passive_interface_default (struct ospf *ospf) +ospf_passive_interface_default (struct ospf *ospf, u_char newval) { struct listnode *ln; struct interface *ifp; struct ospf_interface *oi; + ospf->passive_interface_default = newval; + for (ALL_LIST_ELEMENTS_RO (om->iflist, ln, ifp)) { if (ifp && @@ -266,6 +268,8 @@ ospf_passive_interface_default (struct ospf *ospf) { if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface)) UNSET_IF_PARAM (oi->params, passive_interface); + /* update multicast memberships */ + ospf_if_set_multicast(oi); } } @@ -314,33 +318,31 @@ DEFUN (ospf_passive_interface, struct route_node *rn; struct ospf *ospf = vty->index; + if (argc == 0) + { + ospf_passive_interface_default (ospf, OSPF_IF_PASSIVE); + return CMD_SUCCESS; + } + ifp = if_get_by_name (argv[0]); params = IF_DEF_PARAMS (ifp); - if (argc == 0) - { - ospf->passive_interface_default = OSPF_IF_PASSIVE; - ospf_passive_interface_default (ospf); - } - else + if (argc == 2) { - if (argc == 2) - { - ret = inet_aton(argv[1], &addr); - if (!ret) - { - vty_out (vty, "Please specify interface address by A.B.C.D%s", - VTY_NEWLINE); - return CMD_WARNING; - } + ret = inet_aton(argv[1], &addr); + if (!ret) + { + vty_out (vty, "Please specify interface address by A.B.C.D%s", + VTY_NEWLINE); + return CMD_WARNING; + } - params = ospf_get_if_params (ifp, addr); - ospf_if_update_params (ifp, addr); - } - ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_PASSIVE); + params = ospf_get_if_params (ifp, addr); + ospf_if_update_params (ifp, addr); } - + ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_PASSIVE); + /* XXX We should call ospf_if_set_multicast on exactly those * interfaces for which the passive property changed. It is too much * work to determine this set, so we do this for every interface. @@ -354,7 +356,7 @@ DEFUN (ospf_passive_interface, struct ospf_interface *oi = rn->info; if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_PASSIVE)) - ospf_if_set_multicast(oi); + ospf_if_set_multicast(oi); } /* * XXX It is not clear what state transitions the interface needs to @@ -391,34 +393,32 @@ DEFUN (no_ospf_passive_interface, int ret; struct route_node *rn; struct ospf *ospf = vty->index; + + if (argc == 0) + { + ospf_passive_interface_default (ospf, OSPF_IF_ACTIVE); + return CMD_SUCCESS; + } ifp = if_get_by_name (argv[0]); params = IF_DEF_PARAMS (ifp); - if (argc == 0) - { - ospf->passive_interface_default = OSPF_IF_ACTIVE; - ospf_passive_interface_default (ospf); - } - else + if (argc == 2) { - if (argc == 2) - { - ret = inet_aton(argv[1], &addr); - if (!ret) - { - vty_out (vty, "Please specify interface address by A.B.C.D%s", - VTY_NEWLINE); - return CMD_WARNING; - } + ret = inet_aton(argv[1], &addr); + if (!ret) + { + vty_out (vty, "Please specify interface address by A.B.C.D%s", + VTY_NEWLINE); + return CMD_WARNING; + } - params = ospf_lookup_if_params (ifp, addr); - if (params == NULL) - return CMD_SUCCESS; - } - ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_ACTIVE); + params = ospf_lookup_if_params (ifp, addr); + if (params == NULL) + return CMD_SUCCESS; } + ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_ACTIVE); /* XXX We should call ospf_if_set_multicast on exactly those * interfaces for which the passive property changed. It is too much @@ -2865,7 +2865,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, struct in_addr *dest; const char *dstr; - if ((ifp->flags & IFF_POINTOPOINT) + if ((ifp->flags & IFF_POINTOPOINT) || oi->type == OSPF_IFTYPE_VIRTUALLINK) dstr = "Peer"; else -- cgit v1.2.1