diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-11 22:40:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-11 22:40:14 -0400 |
commit | 038a5008b2f395c85e6e71d6ddf3c684e7c405b0 (patch) | |
tree | 4735eab577e97e5a22c3141e3f60071c8065585e /net/tipc | |
parent | dd6d1844af33acb4edd0a40b1770d091a22c94be (diff) | |
parent | 266918303226cceac7eca38ced30f15f277bd89c (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (867 commits)
[SKY2]: status polling loop (post merge)
[NET]: Fix NAPI completion handling in some drivers.
[TCP]: Limit processing lost_retrans loop to work-to-do cases
[TCP]: Fix lost_retrans loop vs fastpath problems
[TCP]: No need to re-count fackets_out/sacked_out at RTO
[TCP]: Extract tcp_match_queue_to_sack from sacktag code
[TCP]: Kill almost unused variable pcount from sacktag
[TCP]: Fix mark_head_lost to ignore R-bit when trying to mark L
[TCP]: Add bytes_acked (ABC) clearing to FRTO too
[IPv6]: Update setsockopt(IPV6_MULTICAST_IF) to support RFC 3493, try2
[NETFILTER]: x_tables: add missing ip6t_modulename aliases
[NETFILTER]: nf_conntrack_tcp: fix connection reopening
[QETH]: fix qeth_main.c
[NETLINK]: fib_frontend build fixes
[IPv6]: Export userland ND options through netlink (RDNSS support)
[9P]: build fix with !CONFIG_SYSCTL
[NET]: Fix dev_put() and dev_hold() comments
[NET]: make netlink user -> kernel interface synchronious
[NET]: unify netlink kernel socket recognition
[NET]: cleanup 3rd argument in netlink_sendskb
...
Fix up conflicts manually in Documentation/feature-removal-schedule.txt
and my new least favourite crap, the "mod_devicetable" support in the
files include/linux/mod_devicetable.h and scripts/mod/file2alias.c.
(The latter files seem to be explicitly _designed_ to get conflicts when
different subsystems work with them - that have an absolutely horrid
lack of subsystem separation!)
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/eth_media.c | 17 | ||||
-rw-r--r-- | net/tipc/socket.c | 9 |
2 files changed, 19 insertions, 7 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index 711ca4b1f051..3bbef2ab22ae 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <net/tipc/tipc_bearer.h> | 38 | #include <net/tipc/tipc_bearer.h> |
39 | #include <net/tipc/tipc_msg.h> | 39 | #include <net/tipc/tipc_msg.h> |
40 | #include <linux/netdevice.h> | 40 | #include <linux/netdevice.h> |
41 | #include <net/net_namespace.h> | ||
41 | 42 | ||
42 | #define MAX_ETH_BEARERS 2 | 43 | #define MAX_ETH_BEARERS 2 |
43 | #define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI | 44 | #define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI |
@@ -76,7 +77,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr, | |||
76 | skb_reset_network_header(clone); | 77 | skb_reset_network_header(clone); |
77 | dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; | 78 | dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; |
78 | clone->dev = dev; | 79 | clone->dev = dev; |
79 | dev->hard_header(clone, dev, ETH_P_TIPC, | 80 | dev_hard_header(clone, dev, ETH_P_TIPC, |
80 | &dest->dev_addr.eth_addr, | 81 | &dest->dev_addr.eth_addr, |
81 | dev->dev_addr, clone->len); | 82 | dev->dev_addr, clone->len); |
82 | dev_queue_xmit(clone); | 83 | dev_queue_xmit(clone); |
@@ -100,6 +101,11 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev, | |||
100 | struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; | 101 | struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; |
101 | u32 size; | 102 | u32 size; |
102 | 103 | ||
104 | if (dev->nd_net != &init_net) { | ||
105 | kfree_skb(buf); | ||
106 | return 0; | ||
107 | } | ||
108 | |||
103 | if (likely(eb_ptr->bearer)) { | 109 | if (likely(eb_ptr->bearer)) { |
104 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { | 110 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { |
105 | size = msg_size((struct tipc_msg *)buf->data); | 111 | size = msg_size((struct tipc_msg *)buf->data); |
@@ -129,7 +135,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr) | |||
129 | 135 | ||
130 | /* Find device with specified name */ | 136 | /* Find device with specified name */ |
131 | 137 | ||
132 | for_each_netdev(pdev){ | 138 | for_each_netdev(&init_net, pdev){ |
133 | if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { | 139 | if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { |
134 | dev = pdev; | 140 | dev = pdev; |
135 | break; | 141 | break; |
@@ -192,6 +198,9 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt, | |||
192 | struct eth_bearer *eb_ptr = ð_bearers[0]; | 198 | struct eth_bearer *eb_ptr = ð_bearers[0]; |
193 | struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS]; | 199 | struct eth_bearer *stop = ð_bearers[MAX_ETH_BEARERS]; |
194 | 200 | ||
201 | if (dev->nd_net != &init_net) | ||
202 | return NOTIFY_DONE; | ||
203 | |||
195 | while ((eb_ptr->dev != dev)) { | 204 | while ((eb_ptr->dev != dev)) { |
196 | if (++eb_ptr == stop) | 205 | if (++eb_ptr == stop) |
197 | return NOTIFY_DONE; /* couldn't find device */ | 206 | return NOTIFY_DONE; /* couldn't find device */ |
@@ -234,12 +243,12 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt, | |||
234 | static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) | 243 | static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) |
235 | { | 244 | { |
236 | unchar *addr = (unchar *)&a->dev_addr; | 245 | unchar *addr = (unchar *)&a->dev_addr; |
246 | DECLARE_MAC_BUF(mac); | ||
237 | 247 | ||
238 | if (str_size < 18) | 248 | if (str_size < 18) |
239 | *str_buf = '\0'; | 249 | *str_buf = '\0'; |
240 | else | 250 | else |
241 | sprintf(str_buf, "%02x:%02x:%02x:%02x:%02x:%02x", | 251 | sprintf(str_buf, "%s", print_mac(mac, addr)); |
242 | addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); | ||
243 | return str_buf; | 252 | return str_buf; |
244 | } | 253 | } |
245 | 254 | ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 84110172031e..e36b4b5a5222 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -162,13 +162,16 @@ static void advance_queue(struct tipc_sock *tsock) | |||
162 | * | 162 | * |
163 | * Returns 0 on success, errno otherwise | 163 | * Returns 0 on success, errno otherwise |
164 | */ | 164 | */ |
165 | static int tipc_create(struct socket *sock, int protocol) | 165 | static int tipc_create(struct net *net, struct socket *sock, int protocol) |
166 | { | 166 | { |
167 | struct tipc_sock *tsock; | 167 | struct tipc_sock *tsock; |
168 | struct tipc_port *port; | 168 | struct tipc_port *port; |
169 | struct sock *sk; | 169 | struct sock *sk; |
170 | u32 ref; | 170 | u32 ref; |
171 | 171 | ||
172 | if (net != &init_net) | ||
173 | return -EAFNOSUPPORT; | ||
174 | |||
172 | if (unlikely(protocol != 0)) | 175 | if (unlikely(protocol != 0)) |
173 | return -EPROTONOSUPPORT; | 176 | return -EPROTONOSUPPORT; |
174 | 177 | ||
@@ -198,7 +201,7 @@ static int tipc_create(struct socket *sock, int protocol) | |||
198 | return -EPROTOTYPE; | 201 | return -EPROTOTYPE; |
199 | } | 202 | } |
200 | 203 | ||
201 | sk = sk_alloc(AF_TIPC, GFP_KERNEL, &tipc_proto, 1); | 204 | sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto, 1); |
202 | if (!sk) { | 205 | if (!sk) { |
203 | tipc_deleteport(ref); | 206 | tipc_deleteport(ref); |
204 | return -ENOMEM; | 207 | return -ENOMEM; |
@@ -1372,7 +1375,7 @@ static int accept(struct socket *sock, struct socket *newsock, int flags) | |||
1372 | } | 1375 | } |
1373 | buf = skb_peek(&sock->sk->sk_receive_queue); | 1376 | buf = skb_peek(&sock->sk->sk_receive_queue); |
1374 | 1377 | ||
1375 | res = tipc_create(newsock, 0); | 1378 | res = tipc_create(sock->sk->sk_net, newsock, 0); |
1376 | if (!res) { | 1379 | if (!res) { |
1377 | struct tipc_sock *new_tsock = tipc_sk(newsock->sk); | 1380 | struct tipc_sock *new_tsock = tipc_sk(newsock->sk); |
1378 | struct tipc_portid id; | 1381 | struct tipc_portid id; |