Merge branch 'net-next'
diff --git a/include/SNAPSHOT.h b/include/SNAPSHOT.h
index a0cc824..bd414bb 100644
--- a/include/SNAPSHOT.h
+++ b/include/SNAPSHOT.h
@@ -1 +1 @@
-static const char SNAPSHOT[] = "131122";
+static const char SNAPSHOT[] = "140411";
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 14d1720..8169150 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -69,7 +69,7 @@
 	}
 	fprintf(stderr, "Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]\n");
 	fprintf(stderr, "                                                      [ CONFFLAG-LIST ]\n");
-	fprintf(stderr, "       ip addr del IFADDR dev STRING\n");
+	fprintf(stderr, "       ip addr del IFADDR dev STRING [mngtmpaddr]\n");
 	fprintf(stderr, "       ip addr {show|save|flush} [ dev STRING ] [ scope SCOPE-ID ]\n");
 	fprintf(stderr, "                            [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] [up]\n");
 	fprintf(stderr, "       ip addr {showdump|restore}\n");
@@ -1398,8 +1398,10 @@
 		}
 		argc--; argv++;
 	}
-	req.ifa.ifa_flags = ifa_flags;
-	addattr32(&req.n, sizeof(req), IFA_FLAGS, ifa_flags);
+	if (ifa_flags <= 0xff)
+		req.ifa.ifa_flags = ifa_flags;
+	else
+		addattr32(&req.n, sizeof(req), IFA_FLAGS, ifa_flags);
 
 	if (d == NULL) {
 		fprintf(stderr, "Not enough information: \"dev\" argument is required.\n");
diff --git a/ip/link_veth.c b/ip/link_veth.c
index 3cbeb54..1196a1b 100644
--- a/ip/link_veth.c
+++ b/ip/link_veth.c
@@ -34,12 +34,20 @@
 	int err, len;
 	struct rtattr * data;
 	int group;
+	struct ifinfomsg *ifm, *peer_ifm;
+	unsigned int ifi_flags, ifi_change;
 
 	if (strcmp(argv[0], "peer") != 0) {
 		usage();
 		return -1;
 	}
 
+	ifm = NLMSG_DATA(hdr);
+	ifi_flags = ifm->ifi_flags;
+	ifi_change = ifm->ifi_change;
+	ifm->ifi_flags = 0;
+	ifm->ifi_change = 0;
+
 	data = NLMSG_TAIL(hdr);
 	addattr_l(hdr, 1024, VETH_INFO_PEER, NULL, 0);
 
@@ -57,10 +65,12 @@
 		addattr_l(hdr, 1024, IFLA_IFNAME, name, len);
 	}
 
-	if (index) {
-		struct ifinfomsg *ifi = (struct ifinfomsg *)(data + 1);
-		ifi->ifi_index = index;
-	}
+	peer_ifm = RTA_DATA(data);
+	peer_ifm->ifi_index = index;
+	peer_ifm->ifi_flags = ifm->ifi_flags;
+	peer_ifm->ifi_change = ifm->ifi_change;
+	ifm->ifi_flags = ifi_flags;
+	ifm->ifi_change = ifi_change;
 
 	if (group != -1)
 		addattr32(hdr, 1024, IFLA_GROUP, group);
diff --git a/man/man8/ip-neighbour.8 b/man/man8/ip-neighbour.8
index 67fbec7..d6adc65 100644
--- a/man/man8/ip-neighbour.8
+++ b/man/man8/ip-neighbour.8
@@ -55,7 +55,7 @@
 .TP
 ip neighbour replace
 add a new entry or change an existing one
-
+.RS
 .PP
 These commands create new neighbour records or update existing ones.
 
@@ -100,11 +100,12 @@
 .B ip neigh
 does not change the neighbour state if it was valid and the address
 is not changed by this command.
-.RS
-ip neighbour delete - delete a neighbour entry
 .RE
-This command invalidates a neighbour entry.
 
+.TP
+ip neighbour delete
+delete a neighbour entry
+.RS
 .PP
 The arguments are the same as with
 .BR "ip neigh add" ,
@@ -123,13 +124,12 @@
 on a
 .B NOARP
 interface or if the address is multicast or broadcast.
-
-.RS
-ip neighbour show - list neighbour entries
 .RE
 
-This command displays neighbour tables.
-
+.TP
+ip neighbour show
+list neighbour entries
+.RS
 .TP
 .BI to " ADDRESS " (default)
 the prefix selecting the neighbours to list.
@@ -159,15 +159,12 @@
 .B none
 and
 .BR "noarp" .
-
-.RS
-ip neighbour flush - flush neighbour entries
 .RE
 
-This command flushes neighbour tables, selecting
-entries to flush by some criteria.
-
-.PP
+.TP
+ip neighbour flush
+flush neighbour entries
+.RS
 This command has the same arguments as
 .B show.
 The differences are that it does not run when no arguments are given,
@@ -185,6 +182,7 @@
 twice,
 .B ip neigh flush
 also dumps all the deleted neighbours.
+.RE
 
 .SH EXAMPLES
 .PP