]> git.pld-linux.org Git - packages/quagga.git/commitdiff
- correctly parse netlink data for ethernet PtP addresses.
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sat, 22 Oct 2005 20:30:25 +0000 (20:30 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    quagga-rt-netlink.patch -> 1.1

quagga-rt-netlink.patch [new file with mode: 0644]

diff --git a/quagga-rt-netlink.patch b/quagga-rt-netlink.patch
new file mode 100644 (file)
index 0000000..7dc7f1a
--- /dev/null
@@ -0,0 +1,58 @@
+Index: zebra/rt_netlink.c
+===================================================================
+RCS file: /var/cvsroot/quagga/zebra/rt_netlink.c,v
+retrieving revision 1.39
+diff -b -u -p -r1.39 rt_netlink.c
+--- zebra/rt_netlink.c 1 Oct 2005 16:36:54 -0000       1.39
++++ zebra/rt_netlink.c 22 Oct 2005 18:15:11 -0000
+@@ -629,41 +629,24 @@ netlink_interface_addr (struct sockaddr_
+         zlog_debug ("  IFA_LABEL     %s", (char *)RTA_DATA (tb[IFA_LABEL]));
+     }
+   
++  /* logic copied from iproute2/ip/ipaddress.c:print_addrinfo() */
++  if (tb[IFA_LOCAL] == NULL)
++    tb[IFA_LOCAL] = tb[IFA_ADDRESS];
+   if (tb[IFA_ADDRESS] == NULL)
+     tb[IFA_ADDRESS] = tb[IFA_LOCAL];
+   
+-  if (ifp->flags & IFF_POINTOPOINT)
+-    {
+-      if (tb[IFA_LOCAL])
+-        {
+-          addr = RTA_DATA (tb[IFA_LOCAL]);
++  /* local interface address */
++  addr = (tb[IFA_LOCAL] ? RTA_DATA(tb[IFA_LOCAL]) : NULL);
++
++  /* peer or broadcast address */
+           if (tb[IFA_ADDRESS] &&
+             memcmp(RTA_DATA(tb[IFA_ADDRESS]),RTA_DATA(tb[IFA_LOCAL]),4))
+           /* if IFA_ADDRESS != IFA_LOCAL, then it's the peer address */
+-            broad = RTA_DATA (tb[IFA_ADDRESS]);
+-          else
+-            broad = NULL;
+-        }
+-      else
+-        {
+-          if (tb[IFA_ADDRESS])
+-            addr = RTA_DATA (tb[IFA_ADDRESS]);
+-          else
+-            addr = NULL;
+-        }
+-    }
+-  else
+-    {
+-      if (tb[IFA_ADDRESS])
+-        addr = RTA_DATA (tb[IFA_ADDRESS]);
+-      else
+-        addr = NULL;
+-      
+-      if (tb[IFA_BROADCAST])
++    broad = RTA_DATA(tb[IFA_ADDRESS]);
++  else if (tb[IFA_BROADCAST])
+         broad = RTA_DATA(tb[IFA_BROADCAST]);
+       else
+         broad = NULL;
+-    }
+   /* Flags. */
+   if (ifa->ifa_flags & IFA_F_SECONDARY)
This page took 0.076259 seconds and 4 git commands to generate.