Commit c0821881 authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

Merge commit '3216eb03' into integrated

Conflicts:

	sysdep/linux/netlink.c
parents 9dd29a13 3216eb03
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -225,7 +225,7 @@ static inline unsigned ip6_hash(ip6_addr a)
static inline u32 ip6_hash32(ip6_addr a)
{
  /* Returns a 32-bit hash key, although low-order bits are not mixed */
  u32 x = _I0(*a) ^ _I1(*a) ^ _I2(*a) ^ _I3(*a);
  u32 x = _I0(a) ^ _I1(a) ^ _I2(a) ^ _I3(a);
  return x ^ (x << 16) ^ (x << 24);
}

+11 −5
Original line number Diff line number Diff line
@@ -600,7 +600,7 @@ krt_read_ifannounce(struct ks_msg *msg)
}

static void
krt_read_ifinfo(struct ks_msg *msg)
krt_read_ifinfo(struct ks_msg *msg, int scan)
{
  struct if_msghdr *ifm = (struct if_msghdr *)&msg->rtm;
  void *body = (void *)(ifm + 1);
@@ -673,11 +673,14 @@ krt_read_ifinfo(struct ks_msg *msg)
  else
    f.flags |= IF_MULTIACCESS;      /* NBMA */

  if_update(&f);
  iface = if_update(&f);

  if (!scan)
    if_end_partial_update(iface);
}

static void
krt_read_addr(struct ks_msg *msg)
krt_read_addr(struct ks_msg *msg, int scan)
{
  struct ifa_msghdr *ifam = (struct ifa_msghdr *)&msg->rtm;
  void *body = (void *)(ifam + 1);
@@ -787,6 +790,9 @@ krt_read_addr(struct ks_msg *msg)
    ifa_update(&ifa);
  else
    ifa_delete(&ifa);

  if (!scan)
    if_end_partial_update(iface);
}

static void
@@ -806,11 +812,11 @@ krt_read_msg(struct proto *p, struct ks_msg *msg, int scan)
      krt_read_ifannounce(msg);
      break;
    case RTM_IFINFO:
      krt_read_ifinfo(msg);
      krt_read_ifinfo(msg, scan);
      break;
    case RTM_NEWADDR:
    case RTM_DELADDR:
      krt_read_addr(msg);
      krt_read_addr(msg, scan);
      break;
    default:
      break;
+14 −5
Original line number Diff line number Diff line
@@ -453,12 +453,16 @@ nl_parse_link(struct nlmsghdr *h, int scan)
	f.flags |= IF_MULTIACCESS | IF_BROADCAST | IF_MULTICAST;
      else
	f.flags |= IF_MULTIACCESS;	/* NBMA */
      if_update(&f);

      ifi = if_update(&f);

      if (!scan)
	if_end_partial_update(ifi);
    }
}

static void
nl_parse_addr(struct nlmsghdr *h)
nl_parse_addr(struct nlmsghdr *h, int scan)
{
  struct ifaddrmsg *i;
  struct rtattr *a[IFA_ANYCAST+1];
@@ -549,10 +553,15 @@ nl_parse_addr(struct nlmsghdr *h)
  DBG("KIF: IF%d(%s): %s IPA %I, flg %x, net %I/%d, brd %I, opp %I\n",
      ifa.iface->index, ifa.iface->name, new ? "added" : "removed",
      ifa.ip, ifa.flags, ifa.prefix, ifa.pxlen, ifa.brd, ifa.opposite);

  if (new)
    ifa_update(&ifa);
  else
    ifa_delete(&ifa);

  if (!scan)
    if_end_partial_update(ifa.iface);

  return;

 malformed:
@@ -580,14 +589,14 @@ kif_do_scan(struct kif_proto *p UNUSED)
  nl_request_dump(PF_INET, RTM_GETADDR);
  while (h = nl_get_scan())
    if (h->nlmsg_type == RTM_NEWADDR || h->nlmsg_type == RTM_DELADDR)
      nl_parse_addr(h);
      nl_parse_addr(h, 1);
    else
      log(L_DEBUG "nl_scan_ifaces: Unknown packet received (type=%d)", h->nlmsg_type);

  nl_request_dump(PF_INET6, RTM_GETADDR);
  while (h = nl_get_scan())
    if (h->nlmsg_type == RTM_NEWADDR || h->nlmsg_type == RTM_DELADDR)
      nl_parse_addr(h);
      nl_parse_addr(h, 1);
    else
      log(L_DEBUG "nl_scan_ifaces: Unknown packet received (type=%d)", h->nlmsg_type);

@@ -1000,7 +1009,7 @@ nl_async_msg(struct nlmsghdr *h)
    case RTM_NEWADDR:
    case RTM_DELADDR:
      DBG("KRT: Received async address notification (%d)\n", h->nlmsg_type);
      nl_parse_addr(h);
      nl_parse_addr(h, 0);
      break;
    default:
      DBG("KRT: Received unknown async notification (%d)\n", h->nlmsg_type);