Re: ospf6d: handle interface MTU changes
On Wed, Dec 21, 2016 at 12:08:23PM +0100, Jeremie Courreges-Anglas wrote: > > Hi, > > After ospfd here's a diff to make ospf6d refresh his view of an > interface's MTU at runtime. This needs a fresh kernel. > > The parent should pass the IFINFO message to its children first, and > then decide to react to a possible interface change. Like for ospfd, > the engine runs the FSM only if the interface state has actually > changed. > > ok? > This works fine for me. Thank you! Remi
Re: ospf6d: handle interface MTU changes
On Wed, Dec 21, 2016 at 12:08:23PM +0100, Jeremie Courreges-Anglas wrote: > > Hi, > > After ospfd here's a diff to make ospf6d refresh his view of an > interface's MTU at runtime. This needs a fresh kernel. > > The parent should pass the IFINFO message to its children first, and > then decide to react to a possible interface change. Like for ospfd, > the engine runs the FSM only if the interface state has actually > changed. > > ok? Looks like what you did in ospfd. So OK claudio@ > > > Index: ospf6ctl/ospf6ctl.c > === > RCS file: /d/cvs/src/usr.sbin/ospf6ctl/ospf6ctl.c,v > retrieving revision 1.43 > diff -u -p -r1.43 ospf6ctl.c > --- ospf6ctl/ospf6ctl.c 5 Dec 2015 13:12:40 - 1.43 > +++ ospf6ctl/ospf6ctl.c 5 Dec 2016 22:40:53 - > @@ -409,9 +409,10 @@ show_interface_detail_msg(struct imsg *i > iface->name, print_link(iface->flags)); > printf(" Internet address %s Area %s\n", > log_in6addr(&iface->addr), inet_ntoa(iface->area)); > - printf(" Link type %s, state %s", > + printf(" Link type %s, state %s, mtu %d", > get_media_descr(get_ifms_type(iface->if_type)), > - get_linkstate(iface->if_type, iface->linkstate)); > + get_linkstate(iface->if_type, iface->linkstate), > + iface->mtu); > if (iface->linkstate != LINK_STATE_DOWN && > iface->baudrate > 0) { > printf(", "); > Index: ospf6d/kroute.c > === > RCS file: /d/cvs/src/usr.sbin/ospf6d/kroute.c,v > retrieving revision 1.48 > diff -u -p -r1.48 kroute.c > --- ospf6d/kroute.c 17 Jul 2015 20:12:38 - 1.48 > +++ ospf6d/kroute.c 20 Dec 2016 16:09:14 - > @@ -729,12 +729,6 @@ if_change(u_short ifindex, int flags, st > return; > } > > - isvalid = (iface->flags & IFF_UP) && > - LINK_STATE_IS_UP(iface->linkstate); > - > - if (wasvalid == isvalid) > - return; /* nothing changed wrt validity */ > - > /* inform engine and rde about state change if interface is used */ > if (iface->cflags & F_IFACE_CONFIGURED) { > main_imsg_compose_ospfe(IMSG_IFINFO, 0, iface, > @@ -742,6 +736,12 @@ if_change(u_short ifindex, int flags, st > main_imsg_compose_rde(IMSG_IFINFO, 0, iface, > sizeof(struct iface)); > } > + > + isvalid = (iface->flags & IFF_UP) && > + LINK_STATE_IS_UP(iface->linkstate); > + > + if (wasvalid == isvalid) > + return; /* nothing changed wrt validity */ > > /* update redistribute list */ > RB_FOREACH(kr, kroute_tree, &krt) { > Index: ospf6d/ospfe.c > === > RCS file: /d/cvs/src/usr.sbin/ospf6d/ospfe.c,v > retrieving revision 1.49 > diff -u -p -r1.49 ospfe.c > --- ospf6d/ospfe.c3 Sep 2016 10:25:36 - 1.49 > +++ ospf6d/ospfe.c21 Dec 2016 10:55:11 - > @@ -260,7 +260,7 @@ ospfe_dispatch_main(int fd, short event, > struct imsg imsg; > struct imsgev *iev = bula; > struct imsgbuf *ibuf = &iev->ibuf; > - int n, stub_changed, shut = 0; > + int n, stub_changed, shut = 0, isvalid, wasvalid; > unsigned int ifindex; > > if (event & EV_READ) { > @@ -293,11 +293,19 @@ ospfe_dispatch_main(int fd, short event, > if (iface == NULL) > fatalx("interface lost in ospfe"); > > + wasvalid = (iface->flags & IFF_UP) && > + LINK_STATE_IS_UP(iface->linkstate); > + > if_update(iface, ifp->mtu, ifp->flags, ifp->if_type, > ifp->linkstate, ifp->baudrate); > > - if ((iface->flags & IFF_UP) && > - LINK_STATE_IS_UP(iface->linkstate)) { > + isvalid = (iface->flags & IFF_UP) && > + LINK_STATE_IS_UP(iface->linkstate); > + > + if (wasvalid == isvalid) > + break; > + > + if (isvalid) { > if_fsm(iface, IF_EVT_UP); > log_warnx("interface %s up", iface->name); > } else { > > > -- > jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE -- :wq Claudio
Re: ospf6d: handle interface MTU changes
i think this is ok Jeremie Courreges-Anglas(j...@wxcvbn.org) on 2016.12.21 12:08:23 +0100: > > Hi, > > After ospfd here's a diff to make ospf6d refresh his view of an > interface's MTU at runtime. This needs a fresh kernel. > > The parent should pass the IFINFO message to its children first, and > then decide to react to a possible interface change. Like for ospfd, > the engine runs the FSM only if the interface state has actually > changed. > > ok? > > > Index: ospf6ctl/ospf6ctl.c > === > RCS file: /d/cvs/src/usr.sbin/ospf6ctl/ospf6ctl.c,v > retrieving revision 1.43 > diff -u -p -r1.43 ospf6ctl.c > --- ospf6ctl/ospf6ctl.c 5 Dec 2015 13:12:40 - 1.43 > +++ ospf6ctl/ospf6ctl.c 5 Dec 2016 22:40:53 - > @@ -409,9 +409,10 @@ show_interface_detail_msg(struct imsg *i > iface->name, print_link(iface->flags)); > printf(" Internet address %s Area %s\n", > log_in6addr(&iface->addr), inet_ntoa(iface->area)); > - printf(" Link type %s, state %s", > + printf(" Link type %s, state %s, mtu %d", > get_media_descr(get_ifms_type(iface->if_type)), > - get_linkstate(iface->if_type, iface->linkstate)); > + get_linkstate(iface->if_type, iface->linkstate), > + iface->mtu); > if (iface->linkstate != LINK_STATE_DOWN && > iface->baudrate > 0) { > printf(", "); > Index: ospf6d/kroute.c > === > RCS file: /d/cvs/src/usr.sbin/ospf6d/kroute.c,v > retrieving revision 1.48 > diff -u -p -r1.48 kroute.c > --- ospf6d/kroute.c 17 Jul 2015 20:12:38 - 1.48 > +++ ospf6d/kroute.c 20 Dec 2016 16:09:14 - > @@ -729,12 +729,6 @@ if_change(u_short ifindex, int flags, st > return; > } > > - isvalid = (iface->flags & IFF_UP) && > - LINK_STATE_IS_UP(iface->linkstate); > - > - if (wasvalid == isvalid) > - return; /* nothing changed wrt validity */ > - > /* inform engine and rde about state change if interface is used */ > if (iface->cflags & F_IFACE_CONFIGURED) { > main_imsg_compose_ospfe(IMSG_IFINFO, 0, iface, > @@ -742,6 +736,12 @@ if_change(u_short ifindex, int flags, st > main_imsg_compose_rde(IMSG_IFINFO, 0, iface, > sizeof(struct iface)); > } > + > + isvalid = (iface->flags & IFF_UP) && > + LINK_STATE_IS_UP(iface->linkstate); > + > + if (wasvalid == isvalid) > + return; /* nothing changed wrt validity */ > > /* update redistribute list */ > RB_FOREACH(kr, kroute_tree, &krt) { > Index: ospf6d/ospfe.c > === > RCS file: /d/cvs/src/usr.sbin/ospf6d/ospfe.c,v > retrieving revision 1.49 > diff -u -p -r1.49 ospfe.c > --- ospf6d/ospfe.c3 Sep 2016 10:25:36 - 1.49 > +++ ospf6d/ospfe.c21 Dec 2016 10:55:11 - > @@ -260,7 +260,7 @@ ospfe_dispatch_main(int fd, short event, > struct imsg imsg; > struct imsgev *iev = bula; > struct imsgbuf *ibuf = &iev->ibuf; > - int n, stub_changed, shut = 0; > + int n, stub_changed, shut = 0, isvalid, wasvalid; > unsigned int ifindex; > > if (event & EV_READ) { > @@ -293,11 +293,19 @@ ospfe_dispatch_main(int fd, short event, > if (iface == NULL) > fatalx("interface lost in ospfe"); > > + wasvalid = (iface->flags & IFF_UP) && > + LINK_STATE_IS_UP(iface->linkstate); > + > if_update(iface, ifp->mtu, ifp->flags, ifp->if_type, > ifp->linkstate, ifp->baudrate); > > - if ((iface->flags & IFF_UP) && > - LINK_STATE_IS_UP(iface->linkstate)) { > + isvalid = (iface->flags & IFF_UP) && > + LINK_STATE_IS_UP(iface->linkstate); > + > + if (wasvalid == isvalid) > + break; > + > + if (isvalid) { > if_fsm(iface, IF_EVT_UP); > log_warnx("interface %s up", iface->name); > } else { > > > -- > jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE >
ospf6d: handle interface MTU changes
Hi, After ospfd here's a diff to make ospf6d refresh his view of an interface's MTU at runtime. This needs a fresh kernel. The parent should pass the IFINFO message to its children first, and then decide to react to a possible interface change. Like for ospfd, the engine runs the FSM only if the interface state has actually changed. ok? Index: ospf6ctl/ospf6ctl.c === RCS file: /d/cvs/src/usr.sbin/ospf6ctl/ospf6ctl.c,v retrieving revision 1.43 diff -u -p -r1.43 ospf6ctl.c --- ospf6ctl/ospf6ctl.c 5 Dec 2015 13:12:40 - 1.43 +++ ospf6ctl/ospf6ctl.c 5 Dec 2016 22:40:53 - @@ -409,9 +409,10 @@ show_interface_detail_msg(struct imsg *i iface->name, print_link(iface->flags)); printf(" Internet address %s Area %s\n", log_in6addr(&iface->addr), inet_ntoa(iface->area)); - printf(" Link type %s, state %s", + printf(" Link type %s, state %s, mtu %d", get_media_descr(get_ifms_type(iface->if_type)), - get_linkstate(iface->if_type, iface->linkstate)); + get_linkstate(iface->if_type, iface->linkstate), + iface->mtu); if (iface->linkstate != LINK_STATE_DOWN && iface->baudrate > 0) { printf(", "); Index: ospf6d/kroute.c === RCS file: /d/cvs/src/usr.sbin/ospf6d/kroute.c,v retrieving revision 1.48 diff -u -p -r1.48 kroute.c --- ospf6d/kroute.c 17 Jul 2015 20:12:38 - 1.48 +++ ospf6d/kroute.c 20 Dec 2016 16:09:14 - @@ -729,12 +729,6 @@ if_change(u_short ifindex, int flags, st return; } - isvalid = (iface->flags & IFF_UP) && - LINK_STATE_IS_UP(iface->linkstate); - - if (wasvalid == isvalid) - return; /* nothing changed wrt validity */ - /* inform engine and rde about state change if interface is used */ if (iface->cflags & F_IFACE_CONFIGURED) { main_imsg_compose_ospfe(IMSG_IFINFO, 0, iface, @@ -742,6 +736,12 @@ if_change(u_short ifindex, int flags, st main_imsg_compose_rde(IMSG_IFINFO, 0, iface, sizeof(struct iface)); } + + isvalid = (iface->flags & IFF_UP) && + LINK_STATE_IS_UP(iface->linkstate); + + if (wasvalid == isvalid) + return; /* nothing changed wrt validity */ /* update redistribute list */ RB_FOREACH(kr, kroute_tree, &krt) { Index: ospf6d/ospfe.c === RCS file: /d/cvs/src/usr.sbin/ospf6d/ospfe.c,v retrieving revision 1.49 diff -u -p -r1.49 ospfe.c --- ospf6d/ospfe.c 3 Sep 2016 10:25:36 - 1.49 +++ ospf6d/ospfe.c 21 Dec 2016 10:55:11 - @@ -260,7 +260,7 @@ ospfe_dispatch_main(int fd, short event, struct imsg imsg; struct imsgev *iev = bula; struct imsgbuf *ibuf = &iev->ibuf; - int n, stub_changed, shut = 0; + int n, stub_changed, shut = 0, isvalid, wasvalid; unsigned int ifindex; if (event & EV_READ) { @@ -293,11 +293,19 @@ ospfe_dispatch_main(int fd, short event, if (iface == NULL) fatalx("interface lost in ospfe"); + wasvalid = (iface->flags & IFF_UP) && + LINK_STATE_IS_UP(iface->linkstate); + if_update(iface, ifp->mtu, ifp->flags, ifp->if_type, ifp->linkstate, ifp->baudrate); - if ((iface->flags & IFF_UP) && - LINK_STATE_IS_UP(iface->linkstate)) { + isvalid = (iface->flags & IFF_UP) && + LINK_STATE_IS_UP(iface->linkstate); + + if (wasvalid == isvalid) + break; + + if (isvalid) { if_fsm(iface, IF_EVT_UP); log_warnx("interface %s up", iface->name); } else { -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE