nbd, did you have time to look at this new version of the patch? Thanks, Baptiste
On Mon, Sep 14, 2015 at 12:25:33PM +0200, Baptiste Jonglez wrote: > From: Baptiste Jonglez <g...@bitsofnetworks.org> > > A /31-addressed interface requires a broadcast address of 255.255.255.255, > because there is no room for a proper broadcast address. Without this, > any packet destinated to the other end of the link is sent as broadcast, > which is incorrect. > > For consistency with the Linux kernel, /32-addressed interfaces are > treated in the same way. > > Signed-off-by: Baptiste Jonglez <g...@bitsofnetworks.org> > --- > interface-ip.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/interface-ip.c b/interface-ip.c > index 8eb2ff3..0c72e46 100644 > --- a/interface-ip.c > +++ b/interface-ip.c > @@ -473,11 +473,17 @@ interface_update_proto_addr(struct vlist_tree *tree, > if ((a_new->flags & DEVADDR_FAMILY) == DEVADDR_INET4 && > !a_new->broadcast) { > > - uint32_t mask = ~0; > - uint32_t *a = (uint32_t *) &a_new->addr; > - > - mask >>= a_new->mask; > - a_new->broadcast = *a | htonl(mask); > + /* /31 and /32 addressing need 255.255.255.255 > + * as broadcast address. */ > + if (a_new->mask >= 31) { > + a_new->broadcast = (uint32_t) ~0; > + } else { > + uint32_t mask = ~0; > + uint32_t *a = (uint32_t *) &a_new->addr; > + > + mask >>= a_new->mask; > + a_new->broadcast = *a | htonl(mask); > + } > } > } >
pgptA0mfanG4W.pgp
Description: PGP signature
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel