summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Larson <slioch@eng-140.vyatta.com>2008-01-17 12:07:23 -0800
committerMichael Larson <slioch@eng-140.vyatta.com>2008-01-17 12:07:23 -0800
commit9c17d91e617fd22f18b99d8705e3787974b66228 (patch)
treea03b61fa5f060a6ab279b1bddea4bcd41d618431
parentbf2a2b44cbbf37873e07fc7ad218e798ed50f501 (diff)
downloadquagga-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.cc2
-rw-r--r--watchlink/netlink_event.hh2
-rw-r--r--watchlink/netlink_linkstatus.cc4
-rw-r--r--watchlink/netlink_send.cc2
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) );
}