Remi Locherer <[email protected]> writes:
> On Sat, Nov 26, 2016 at 09:39:40AM +0100, Jeremie Courreges-Anglas wrote:
>> Remi Locherer <[email protected]> writes:
>>
>> > Hi,
>> >
>> > I ran into problems with mtu sizes on interfaces (gif in my case) and
>> > ospfd. mtu was not the same on both sites so adjacency could not be
>> > formed. The mtu mismatch is also logged by ospfd.
>> >
>> > Just changing the MTU with ifconfig is not enough in such a case. I did
>> > not want to restart ospfd since that produces an outage. What I did:
>> >
>> > * ifconfig gif1 down
>> > * vi /etc/ospfd.conf -> remove gif1
>> > * ospfctl reload
>> > * ifconfig gif1 mtu 1380 up
>> > * vi /etc/ospfd.conf -> add gif1
>> > * ospfctl reload
>> >
>> > To make this a bit easier I propose the below two patches.
>> >
>> > The first displays the mtu currently known by ospd with ospfctl. Eg:
>> >
>> > -----
>> > remi@mistral:~% doas /usr/src/usr.sbin/ospfctl/obj/ospfctl sho int iwm0
>> >
>> > Interface iwm0, line protocol is UP
>> > Internet address 172.18.35.224/24, Area 0.0.0.0
>> > Linkstate active, MTU 1500
>> > ^^^^^^^^
>> > Router ID 10.10.10.1, network type BROADCAST, cost: 10
>> > Transmit delay is 1 sec(s), state DR, priority 1
>> > Designated Router (ID) 10.10.10.1, interface address 172.18.35.224
>> > Backup Designated Router (ID) 0.0.0.0, interface address 0.0.0.0
>> > Timer intervals configured, hello 10, dead 40, wait 40, retransmit 5
>> > Hello timer due in 00:00:06+345msec
>> > Uptime 00:00:44
>> > Neighbor count is 0, adjacent neighbor count is 0
>> > -----
>>
>> Makes sense.
>>
>> >
>> > The second patch allows ospfd to learn about a changed mtu value (or other
>> > interface configs) with a "ospfctl reload".
>> >
>> > Would it be better if an mtu change generates a route message that is
>> > picked up by ospfd the same way as other changes to interfaces configs?
>>
>> I think so. Does the diff below work for you?
>>
>
> Yes this works. With that I can just fix the mtu without reloading ospfd.
> Nice!
Thanks for confirming. There's one thing that bugs me when I change the
mtu on an interface:
if_fsm: interface vether0, event UP not expected in state WAIT
interface vether0 up
if_fsm: interface vether0, event UP not expected in state WAIT
interface vether0 up
"not expected" or "really, should not happen"? Maybe this routing
message (or the one that could be sent for SIOCSIFXFLAGS) is breaking
some kind of assumption here? Input welcome.
>> Index: sys/net/if.c
>> ===================================================================
>> RCS file: /d/cvs/src/sys/net/if.c,v
>> retrieving revision 1.462
>> diff -u -p -r1.462 if.c
>> --- sys/net/if.c 21 Nov 2016 09:09:06 -0000 1.462
>> +++ sys/net/if.c 26 Nov 2016 08:26:08 -0000
>> @@ -1886,6 +1886,8 @@ ifioctl(struct socket *so, u_long cmd, c
>> if (ifp->if_ioctl == NULL)
>> return (EOPNOTSUPP);
>> error = (*ifp->if_ioctl)(ifp, cmd, data);
>> + if (!error)
>> + rt_ifmsg(ifp);
>> break;
>>
>> case SIOCSIFPHYADDR:
>> Index: usr.sbin/ospfctl/ospfctl.c
>> ===================================================================
>> RCS file: /d/cvs/src/usr.sbin/ospfctl/ospfctl.c,v
>> retrieving revision 1.63
>> diff -u -p -r1.63 ospfctl.c
>> --- usr.sbin/ospfctl/ospfctl.c 3 Dec 2015 11:42:14 -0000 1.63
>> +++ usr.sbin/ospfctl/ospfctl.c 26 Nov 2016 08:23:52 -0000
>> @@ -434,8 +434,9 @@ show_interface_detail_msg(struct imsg *i
>> inet_ntoa(iface->addr),
>> mask2prefixlen(iface->mask.s_addr));
>> printf("Area %s\n", inet_ntoa(iface->area));
>> - printf(" Linkstate %s\n",
>> + printf(" Linkstate %s,",
>> get_linkstate(iface->if_type, iface->linkstate));
>> + printf(" MTU %d\n", iface->mtu);
>> printf(" Router ID %s, network type %s, cost: %d\n",
>> inet_ntoa(iface->rtr_id),
>> if_type_name(iface->type), iface->metric);
>> Index: usr.sbin/ospfd/ospfe.c
>> ===================================================================
>> RCS file: /d/cvs/src/usr.sbin/ospfd/ospfe.c,v
>> retrieving revision 1.96
>> diff -u -p -r1.96 ospfe.c
>> --- usr.sbin/ospfd/ospfe.c 3 Sep 2016 10:22:57 -0000 1.96
>> +++ usr.sbin/ospfd/ospfe.c 26 Nov 2016 08:30:34 -0000
>> @@ -318,6 +318,7 @@ ospfe_dispatch_main(int fd, short event,
>> iface->flags = kif->flags;
>> iface->linkstate =
>> kif->link_state;
>> + iface->mtu = kif->mtu;
>>
>> if (link_ok) {
>> if_fsm(iface,
>>
>>
>> --
>> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE
>
--
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE