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.

G

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:
>
>

Reply via email to