Forwarding to the dev list, a discussion from quagga-users.  Discussion in this 
thread:  
https://lists.quagga.net/pipermail/quagga-users/2015-February/013960.html

There appears to be a bug in setting broadcast address for interfaces 
configured with  /31 mask (RFC3021).  Mask should be set to 255.255.255.255 but 
is being set to 0.0.0.0

I did some digging and it appears there was a patch for RFC3021 back in 2002 
that was later reverted (performance reasons?)
https://code.google.com/p/google-quagga/source/detail?r=00df0c1e80811f3cf5eca0b28e720bf1bcc84a53<https://code.google.com/p/google-quagga/source/detail?r=00df0c1e80811f3cf5eca0b28e720bf1bcc84a53&path=/ripd/ripd.h>

This was patched to support IPv6:
http://marc.info/?l=zebra&m=103850734408456

, and then later all reverted:
-2003-09-29 Paul Jakma <[email protected]>
-
-        * zebra/connected.c: revert the 'generic PtP' patch as it causes
-        far too many problems.
Etc.

Also found reference to /31 handling in /lib/prefix.c/.h helper utility:
/* given the address of a host on a network and the network mask length,
* calculate the broadcast address for that network;
* special treatment for /31: returns the address of the other host
* on the network by flipping the host bit */

There's a decade of history to go through, but I see some various threads about 
PtP links, /31, Ethernet broadcast handling and it's not clear what the intent 
is or how it's handled.  But it's definitely not RFC3021 compliant.

Any thoughts/ideas here?  History lesson or anything else helpful?  I can work 
on a patch but I'm new to this code base.

Thanks,
John


From: John Arnold (GNS)
Sent: Wednesday, February 25, 2015 4:13 PM
To: '[email protected]'
Subject: Re: subnet /31

Hi,

Is configuring Ethernet interfaces with /31 via zebra bugged?  Broadcast 
address gets configured as 0.0.0.0 and pings to the far side don't work.  I've 
reviewed RFC3021 and I think the broadcast address is supposed to be set to 
link local broadcast,  255.255.255.255.

>> Apply /31 via quagga:
quagga-router# conf t
quagga-router(config)# int e00-1
quagga-router(config-if)# ip address 50.0.0.0/31
quagga-router(config-if)# end
quagga-router# write mem
Building Configuration...
Integrated configuration saved to /etc/quagga/Quagga.conf
[OK]

root@r1:/home/amazon# ifconfig e00-1
e00-1     Link encap:Ethernet  HWaddr ec:f4:bb:fc:21:74
          inet addr:50.0.0.0  Bcast:0.0.0.0  Mask:255.255.255.254
          inet6 addr: fe80::eef4:bbff:fefc:2174/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25599 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:4786165 (4.7 MB)


Applying ip/subnet via ifconfig works (pings work) yet gives a weird broadcast 
address:

>> apply /31 via ifconfig:

root@amazon:/home/amazon# ifconfig e00-1 50.0.0.0/31
root@amazon:/home/amazon# ifconfig e00-1
e00-1     Link encap:Ethernet  HWaddr ec:f4:bb:fc:21:74
          inet addr:50.0.0.0  Bcast:50.255.255.255  Mask:255.255.255.254
          inet6 addr: fe80::eef4:bbff:fefc:2174/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25605 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:4787287 (4.7 MB)

And anecdotally I found some references to RFC3021 broadcast addresses being 
miscalculated in  ifupdown code, so perhaps ifconfig is bugged too.

Using the newer libraries I see the same result as quagga (broadcast 0.0.0.0):

>> add /31 via iproute2 tools

root@amazon:/home/amazon# ip addr add 50.0.0.0/31 dev e00-1
root@amazon:/home/amazon# ip addr show dev e00-1
8: e00-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group 
default qlen 500
    link/ether ec:f4:bb:fc:21:74 brd ff:ff:ff:ff:ff:ff
    inet 50.0.0.0/31 scope global e00-1
       valid_lft forever preferred_lft forever
    inet6 fe80::eef4:bbff:fefc:2174/64 scope link
       valid_lft forever preferred_lft forever
root@amazon:/home/amazon# ifconfig e00-1
e00-1     Link encap:Ethernet  HWaddr ec:f4:bb:fc:21:74
          inet addr:50.0.0.0  Bcast:0.0.0.0  Mask:255.255.255.254
          inet6 addr: fe80::eef4:bbff:fefc:2174/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25613 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:4788783 (4.7 MB)


Anybody know what's going on here?

Thanks,
John
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to