On Thu, Jul 04, 2019 at 09:20:59AM +0300, Kapetanakis Giannis wrote:
> Hi,
>
> This does not work for me with IOS.
>
> neighbor is full,
> rib is ok
> fib does not list the routes to IOS and
> routing table is not updated on BSD
>
> On IOS I do have the loopback route the BSD is announcing.
Thank you for testing!
Can you send me your ospfd.conf, the output from ospfd -dv and the output
from tcpdump showing the ospf traffic?
> On 24/06/2019 01:33, Remi Locherer wrote:
> > Diff below adds to ospfd point to point support for Ethernet interfaces.
> > I successfully tested this against Junos and FastIron.
> >
> > I first made the key word in the config "point-to-point". But then I
> > changed to "type p2p". The later would allow for "type nbma" or "type p2mp"
> > should we implement these types.
> >
> > On Junos it looks like this:
> >
> > area 0.0.0.0 {
> > interface ge-0/0/1.0 {
> > interface-type p2p;
> > }
> > }
> >
> > On FastIron it's similar to IOS:
> >
> > interface ethernet 1/2/1
> > ip address 10.10.10.5 255.255.255.0
> > ip ospf area 0
> > ip ospf network point-to-point
> >
> > Comments, test reports and OKs are welcome.
> >
> > Remi
> >
> >
> > Index: interface.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/ospfd/interface.c,v
> > retrieving revision 1.82
> > diff -u -p -r1.82 interface.c
> > --- interface.c 11 Mar 2018 13:16:49 -0000 1.82
> > +++ interface.c 23 Jun 2019 11:27:57 -0000
> > @@ -190,6 +190,8 @@ if_new(struct kif *kif, struct kif_addr
> > if (kif->flags & IFF_BROADCAST &&
> > kif->flags & IFF_MULTICAST)
> > iface->type = IF_TYPE_BROADCAST;
> > + if (iface->p2p)
> > + iface->type = IF_TYPE_POINTOPOINT;
> > if (kif->flags & IFF_LOOPBACK) {
> > iface->type = IF_TYPE_POINTOPOINT;
> > iface->passive = 1;
> > @@ -351,6 +353,9 @@ if_act_start(struct iface *iface)
> > orig_rtr_lsa(iface->area);
> > return (0);
> > }
> > +
> > + if (iface->p2p)
> > + iface->type = IF_TYPE_POINTOPOINT;
> >
> > switch (iface->type) {
> > case IF_TYPE_POINTOPOINT:
> > Index: ospfd.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/ospfd/ospfd.c,v
> > retrieving revision 1.108
> > diff -u -p -r1.108 ospfd.c
> > --- ospfd.c 16 May 2019 05:49:22 -0000 1.108
> > +++ ospfd.c 23 Jun 2019 21:06:44 -0000
> > @@ -911,6 +911,22 @@ merge_interfaces(struct area *a, struct
> > if_fsm(i, IF_EVT_UP);
> > }
> >
> > + if (i->p2p != xi->p2p) {
> > + /* re-add interface to enable or disable DR election */
> > + if (ospfd_process == PROC_OSPF_ENGINE)
> > + if_fsm(i, IF_EVT_DOWN);
> > + else if (ospfd_process == PROC_RDE_ENGINE)
> > + rde_nbr_iface_del(i);
> > + LIST_REMOVE(i, entry);
> > + if_del(i);
> > + LIST_REMOVE(xi, entry);
> > + LIST_INSERT_HEAD(&a->iface_list, xi, entry);
> > + xi->area = a;
> > + if (ospfd_process == PROC_OSPF_ENGINE)
> > + xi->state = IF_STA_NEW;
> > + continue;
> > + }
> > +
> > strlcpy(i->dependon, xi->dependon,
> > sizeof(i->dependon));
> > i->depend_ok = xi->depend_ok;
> > Index: ospfd.conf.5
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/ospfd/ospfd.conf.5,v
> > retrieving revision 1.57
> > diff -u -p -r1.57 ospfd.conf.5
> > --- ospfd.conf.5 10 Jun 2019 06:07:15 -0000 1.57
> > +++ ospfd.conf.5 23 Jun 2019 22:10:32 -0000
> > @@ -419,6 +419,9 @@ Router.
> > .It Ic transmit-delay Ar seconds
> > Set the transmit delay.
> > The default value is 1; valid range is 1\-3600 seconds.
> > +.It Ic type p2p
> > +Set the interface type to point to point.
> > +This disables the election of a DR and BDR for the given interface.
> > .El
> > .Sh FILES
> > .Bl -tag -width "/etc/ospfd.conf" -compact
> > Index: ospfd.h
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
> > retrieving revision 1.104
> > diff -u -p -r1.104 ospfd.h
> > --- ospfd.h 16 May 2019 05:49:22 -0000 1.104
> > +++ ospfd.h 23 Jun 2019 11:28:24 -0000
> > @@ -363,6 +363,7 @@ struct iface {
> > u_int8_t linkstate;
> > u_int8_t priority;
> > u_int8_t passive;
> > + u_int8_t p2p;
> > };
> >
> > struct ifaddrchange {
> > Index: parse.y
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/ospfd/parse.y,v
> > retrieving revision 1.98
> > diff -u -p -r1.98 parse.y
> > --- parse.y 7 Jun 2019 04:57:45 -0000 1.98
> > +++ parse.y 23 Jun 2019 22:04:22 -0000
> > @@ -129,7 +129,7 @@ typedef struct {
> > %token AREA INTERFACE ROUTERID FIBPRIORITY FIBUPDATE REDISTRIBUTE
> > RTLABEL
> > %token RDOMAIN RFC1583COMPAT STUB ROUTER SPFDELAY SPFHOLDTIME EXTTAG
> > %token AUTHKEY AUTHTYPE AUTHMD AUTHMDKEYID
> > -%token METRIC PASSIVE
> > +%token METRIC P2P PASSIVE
> > %token HELLOINTERVAL FASTHELLOINTERVAL TRANSMITDELAY
> > %token RETRANSMITINTERVAL ROUTERDEADTIME ROUTERPRIORITY
> > %token SET TYPE
> > @@ -743,6 +743,7 @@ interfaceopts_l : interfaceopts_l interf
> > ;
> >
> > interfaceoptsl : PASSIVE { iface->passive = 1; }
> > + | TYPE P2P { iface->p2p = 1; }
> > | DEMOTE STRING {
> > if (strlcpy(iface->demote_group, $2,
> > sizeof(iface->demote_group)) >=
> > @@ -833,6 +834,7 @@ lookup(char *s)
> > {"msec", MSEC},
> > {"no", NO},
> > {"on", ON},
> > + {"p2p", P2P},
> > {"passive", PASSIVE},
> > {"rdomain", RDOMAIN},
> > {"redistribute", REDISTRIBUTE},
> > Index: printconf.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/ospfd/printconf.c,v
> > retrieving revision 1.20
> > diff -u -p -r1.20 printconf.c
> > --- printconf.c 28 Dec 2018 19:25:10 -0000 1.20
> > +++ printconf.c 23 Jun 2019 22:05:55 -0000
> > @@ -149,6 +149,9 @@ print_iface(struct iface *iface)
> > printf("\t\trouter-priority %d\n", iface->priority);
> > printf("\t\ttransmit-delay %d\n", iface->transmit_delay);
> >
> > + if (iface->p2p)
> > + printf("\t\ttype p2p\n");
> > +
> > printf("\t\tauth-type %s\n", if_auth_name(iface->auth_type));
> > switch (iface->auth_type) {
> > case AUTH_TYPE_NONE:
> >
> >
>