On 2013-04-13, Hrvoje Popovski <[email protected]> wrote:
> On 13.4.2013. 17:29, Stuart Henderson wrote:
>> ospfd doesn't support point-to-point on ethernet interfaces, you will
>> need to remove this from cisco config for now.
>>
>> might not be too hard to add though.. (as in, I have a diff which builds,
>> but I have no idea if it works ;-)
>>
>
> could you post that diff, i'm willing to test it
>
>
naive diff, and tested on a hack box only: if you run it in
production and it eats your network, don't blame me. ;-)
(for anyone wondering if this is useful: if you are sure you'll
only have the 2 routers on a segment, it avoids waiting for $dead-time
before bringing up adjacencies).
Index: ospfd/interface.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/interface.c,v
retrieving revision 1.75
diff -u -p -r1.75 interface.c
--- ospfd/interface.c 14 May 2012 10:17:21 -0000 1.75
+++ ospfd/interface.c 13 Apr 2013 20:18:55 -0000
@@ -348,6 +348,10 @@ if_act_start(struct iface *iface)
iface->name);
iface->passive = 1;
}
+ if (iface->pointopoint) {
+ log_warnx("if_act_start: interface %s configured as
point-to-point", iface->name);
+ iface->type = IF_TYPE_POINTOPOINT;
+ }
gettimeofday(&now, NULL);
iface->uptime = now.tv_sec;
Index: ospfd/ospfd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.c,v
retrieving revision 1.79
diff -u -p -r1.79 ospfd.c
--- ospfd/ospfd.c 22 Mar 2013 11:29:01 -0000 1.79
+++ ospfd/ospfd.c 13 Apr 2013 20:18:55 -0000
@@ -813,6 +813,7 @@ merge_interfaces(struct area *a, struct
* - new interfaces (easy)
* - deleted interfaces (needs to be done via fsm?)
* - changing passive (painful?)
+ * - changing point-to-point (painful?)
*/
for (i = LIST_FIRST(&a->iface_list); i != NULL; i = ni) {
ni = LIST_NEXT(i, entry);
@@ -872,6 +873,15 @@ merge_interfaces(struct area *a, struct
if (ospfd_process == PROC_OSPF_ENGINE)
if_fsm(i, IF_EVT_DOWN);
i->passive = xi->passive;
+ if (ospfd_process == PROC_OSPF_ENGINE)
+ if_fsm(i, IF_EVT_UP);
+ }
+
+ if (i->pointopoint != xi->pointopoint) {
+ /* need to restart interface to cope with this change??
*/
+ if (ospfd_process == PROC_OSPF_ENGINE)
+ if_fsm(i, IF_EVT_DOWN);
+ i->pointopoint = xi->pointopoint;
if (ospfd_process == PROC_OSPF_ENGINE)
if_fsm(i, IF_EVT_UP);
}
Index: ospfd/ospfd.h
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
retrieving revision 1.91
diff -u -p -r1.91 ospfd.h
--- ospfd/ospfd.h 17 Jan 2013 10:07:56 -0000 1.91
+++ ospfd/ospfd.h 13 Apr 2013 20:18:55 -0000
@@ -350,6 +350,7 @@ struct iface {
u_int8_t linkstate;
u_int8_t priority;
u_int8_t passive;
+ u_int8_t pointopoint;
};
struct ifaddrdel {
Index: ospfd/parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/parse.y,v
retrieving revision 1.74
diff -u -p -r1.74 parse.y
--- ospfd/parse.y 6 Mar 2013 21:36:57 -0000 1.74
+++ ospfd/parse.y 13 Apr 2013 20:18:55 -0000
@@ -120,7 +120,7 @@ typedef struct {
%token AREA INTERFACE ROUTERID FIBUPDATE REDISTRIBUTE RTLABEL RDOMAIN
%token RFC1583COMPAT STUB ROUTER SPFDELAY SPFHOLDTIME EXTTAG
%token AUTHKEY AUTHTYPE AUTHMD AUTHMDKEYID
-%token METRIC PASSIVE
+%token METRIC PASSIVE POINTOPOINT
%token HELLOINTERVAL FASTHELLOINTERVAL TRANSMITDELAY
%token RETRANSMITINTERVAL ROUTERDEADTIME ROUTERPRIORITY
%token SET TYPE
@@ -664,6 +664,7 @@ interfaceopts_l : interfaceopts_l interf
;
interfaceoptsl : PASSIVE { iface->passive = 1; }
+ | POINTOPOINT { iface->pointopoint = 1; }
| DEMOTE STRING {
if (strlcpy(iface->demote_group, $2,
sizeof(iface->demote_group)) >=
@@ -734,6 +735,7 @@ lookup(char *s)
{"msec", MSEC},
{"no", NO},
{"passive", PASSIVE},
+ {"point-to-point", POINTOPOINT},
{"rdomain", RDOMAIN},
{"redistribute", REDISTRIBUTE},
{"retransmit-interval", RETRANSMITINTERVAL},
Index: ospfd/printconf.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/printconf.c,v
retrieving revision 1.16
diff -u -p -r1.16 printconf.c
--- ospfd/printconf.c 6 Mar 2013 15:43:23 -0000 1.16
+++ ospfd/printconf.c 13 Apr 2013 20:18:55 -0000
@@ -119,6 +119,8 @@ print_iface(struct iface *iface)
if (*iface->demote_group)
printf("\t\tdemote %s\n", iface->demote_group);
+ if (iface->pointopoint)
+ printf("\t\tpoint-to-point\n");
if (iface->passive)
printf("\t\tpassive\n");
else {