diff options
author | Michael Larson <slioch@eng-140.vyatta.com> | 2008-01-17 12:07:23 -0800 |
---|---|---|
committer | Michael Larson <slioch@eng-140.vyatta.com> | 2008-01-17 12:07:23 -0800 |
commit | 9c17d91e617fd22f18b99d8705e3787974b66228 (patch) | |
tree | a03b61fa5f060a6ab279b1bddea4bcd41d618431 | |
parent | bf2a2b44cbbf37873e07fc7ad218e798ed50f501 (diff) | |
download | quagga-9c17d91e617fd22f18b99d8705e3787974b66228.tar.bz2 quagga-9c17d91e617fd22f18b99d8705e3787974b66228.tar.xz |
fix bug introduced with ptp support--indexing of database and initialization of terminating address.
-rw-r--r-- | watchlink/netlink_event.cc | 2 | ||||
-rw-r--r-- | watchlink/netlink_event.hh | 2 | ||||
-rw-r--r-- | watchlink/netlink_linkstatus.cc | 4 | ||||
-rw-r--r-- | watchlink/netlink_send.cc | 2 |
4 files changed, 5 insertions, 5 deletions
diff --git a/watchlink/netlink_event.cc b/watchlink/netlink_event.cc index 1453db7c..1eee7876 100644 --- a/watchlink/netlink_event.cc +++ b/watchlink/netlink_event.cc @@ -219,7 +219,7 @@ NetlinkEventManager::parse_msg(const struct nlmsghdr *nlHdr) addr = IPv4(address); break; case IFA_LABEL: - iface = string((char*)RTA_DATA(rtAttr)); + iface = *((char*)RTA_DATA(rtAttr)); break; case IFA_BROADCAST: address = *(uint32_t *)RTA_DATA(rtAttr); diff --git a/watchlink/netlink_event.hh b/watchlink/netlink_event.hh index 06961faa..952f1b9f 100644 --- a/watchlink/netlink_event.hh +++ b/watchlink/netlink_event.hh @@ -49,7 +49,7 @@ private: class IPv4 { public: - IPv4() {} + IPv4() : _addr(-1) {} IPv4(uint32_t addr) : _addr(addr) {} uint32_t diff --git a/watchlink/netlink_linkstatus.cc b/watchlink/netlink_linkstatus.cc index cf6a4e59..e1aa78dc 100644 --- a/watchlink/netlink_linkstatus.cc +++ b/watchlink/netlink_linkstatus.cc @@ -174,8 +174,8 @@ NetlinkLinkStatus::process_going_up(const NetlinkEvent &event) int ifindex = strtoul(tokens.get(0).c_str(),NULL,10); uint32_t local_addr = strtoul(tokens.get(1).c_str(),NULL,10); - uint32_t addr = strtoul(tokens.get(1).c_str(),NULL,10); - int mask_len = strtoul(tokens.get(2).c_str(),NULL,10); + uint32_t addr = strtoul(tokens.get(2).c_str(),NULL,10); + int mask_len = strtoul(tokens.get(3).c_str(),NULL,10); //reinsert addresses to interface if (_nl_send.send_set(_send_sock, ifindex, local_addr, addr, mask_len, RTM_NEWADDR)) { diff --git a/watchlink/netlink_send.cc b/watchlink/netlink_send.cc index 2e1030b7..1f6c62f6 100644 --- a/watchlink/netlink_send.cc +++ b/watchlink/netlink_send.cc @@ -104,7 +104,7 @@ NetlinkSend::send_set(int sock, int ifindex, uint32_t local_addr, uint32_t addr, // addr = htonl( addr ); addattr_l(&req.n, sizeof(req), IFA_LOCAL, &local_addr, sizeof(addr) ); - if (local_addr != addr) { + if (addr != -1 && local_addr != addr) { addattr_l(&req.n, sizeof(req), IFA_ADDRESS, &addr, sizeof(addr) ); } |