aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2007-10-12 21:27:47 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2007-10-12 21:27:47 -0400
commitb981d8b3f5e008ff10d993be633ad00564fc22cd (patch)
treee292dc07b22308912cf6a58354a608b9e5e8e1fd /net/tipc
parentb11d2127c4893a7315d1e16273bc8560049fa3ca (diff)
parent2b9e0aae1d50e880c58d46788e5e3ebd89d75d62 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/macintosh/adbhid.c
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/eth_media.c17
-rw-r--r--net/tipc/handler.c2
-rw-r--r--net/tipc/link.c30
-rw-r--r--net/tipc/msg.h6
-rw-r--r--net/tipc/name_table.c5
-rw-r--r--net/tipc/node.c2
-rw-r--r--net/tipc/port.c1
-rw-r--r--net/tipc/socket.c21
8 files changed, 46 insertions, 38 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 = &eth_bearers[0]; 198 struct eth_bearer *eb_ptr = &eth_bearers[0];
193 struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS]; 199 struct eth_bearer *stop = &eth_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,
234static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) 243static 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/handler.c b/net/tipc/handler.c
index e1dcf663f8a6..0c70010a7dfe 100644
--- a/net/tipc/handler.c
+++ b/net/tipc/handler.c
@@ -97,7 +97,7 @@ int tipc_handler_start(void)
97{ 97{
98 tipc_queue_item_cache = 98 tipc_queue_item_cache =
99 kmem_cache_create("tipc_queue_items", sizeof(struct queue_item), 99 kmem_cache_create("tipc_queue_items", sizeof(struct queue_item),
100 0, SLAB_HWCACHE_ALIGN, NULL, NULL); 100 0, SLAB_HWCACHE_ALIGN, NULL);
101 if (!tipc_queue_item_cache) 101 if (!tipc_queue_item_cache)
102 return -ENOMEM; 102 return -ENOMEM;
103 103
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 5adfdfd49d61..1b17fecee747 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -423,6 +423,17 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer,
423 return NULL; 423 return NULL;
424 } 424 }
425 425
426 if (LINK_LOG_BUF_SIZE) {
427 char *pb = kmalloc(LINK_LOG_BUF_SIZE, GFP_ATOMIC);
428
429 if (!pb) {
430 kfree(l_ptr);
431 warn("Link creation failed, no memory for print buffer\n");
432 return NULL;
433 }
434 tipc_printbuf_init(&l_ptr->print_buf, pb, LINK_LOG_BUF_SIZE);
435 }
436
426 l_ptr->addr = peer; 437 l_ptr->addr = peer;
427 if_name = strchr(b_ptr->publ.name, ':') + 1; 438 if_name = strchr(b_ptr->publ.name, ':') + 1;
428 sprintf(l_ptr->name, "%u.%u.%u:%s-%u.%u.%u:", 439 sprintf(l_ptr->name, "%u.%u.%u:%s-%u.%u.%u:",
@@ -432,8 +443,6 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer,
432 tipc_zone(peer), tipc_cluster(peer), tipc_node(peer)); 443 tipc_zone(peer), tipc_cluster(peer), tipc_node(peer));
433 /* note: peer i/f is appended to link name by reset/activate */ 444 /* note: peer i/f is appended to link name by reset/activate */
434 memcpy(&l_ptr->media_addr, media_addr, sizeof(*media_addr)); 445 memcpy(&l_ptr->media_addr, media_addr, sizeof(*media_addr));
435 k_init_timer(&l_ptr->timer, (Handler)link_timeout, (unsigned long)l_ptr);
436 list_add_tail(&l_ptr->link_list, &b_ptr->links);
437 l_ptr->checkpoint = 1; 446 l_ptr->checkpoint = 1;
438 l_ptr->b_ptr = b_ptr; 447 l_ptr->b_ptr = b_ptr;
439 link_set_supervision_props(l_ptr, b_ptr->media->tolerance); 448 link_set_supervision_props(l_ptr, b_ptr->media->tolerance);
@@ -459,21 +468,14 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer,
459 468
460 l_ptr->owner = tipc_node_attach_link(l_ptr); 469 l_ptr->owner = tipc_node_attach_link(l_ptr);
461 if (!l_ptr->owner) { 470 if (!l_ptr->owner) {
471 if (LINK_LOG_BUF_SIZE)
472 kfree(l_ptr->print_buf.buf);
462 kfree(l_ptr); 473 kfree(l_ptr);
463 return NULL; 474 return NULL;
464 } 475 }
465 476
466 if (LINK_LOG_BUF_SIZE) { 477 k_init_timer(&l_ptr->timer, (Handler)link_timeout, (unsigned long)l_ptr);
467 char *pb = kmalloc(LINK_LOG_BUF_SIZE, GFP_ATOMIC); 478 list_add_tail(&l_ptr->link_list, &b_ptr->links);
468
469 if (!pb) {
470 kfree(l_ptr);
471 warn("Link creation failed, no memory for print buffer\n");
472 return NULL;
473 }
474 tipc_printbuf_init(&l_ptr->print_buf, pb, LINK_LOG_BUF_SIZE);
475 }
476
477 tipc_k_signal((Handler)tipc_link_start, (unsigned long)l_ptr); 479 tipc_k_signal((Handler)tipc_link_start, (unsigned long)l_ptr);
478 480
479 dbg("tipc_link_create(): tolerance = %u,cont intv = %u, abort_limit = %u\n", 481 dbg("tipc_link_create(): tolerance = %u,cont intv = %u, abort_limit = %u\n",
@@ -2381,10 +2383,10 @@ void tipc_link_changeover(struct link *l_ptr)
2381 struct tipc_msg *msg = buf_msg(crs); 2383 struct tipc_msg *msg = buf_msg(crs);
2382 2384
2383 if ((msg_user(msg) == MSG_BUNDLER) && split_bundles) { 2385 if ((msg_user(msg) == MSG_BUNDLER) && split_bundles) {
2384 u32 msgcount = msg_msgcnt(msg);
2385 struct tipc_msg *m = msg_get_wrapped(msg); 2386 struct tipc_msg *m = msg_get_wrapped(msg);
2386 unchar* pos = (unchar*)m; 2387 unchar* pos = (unchar*)m;
2387 2388
2389 msgcount = msg_msgcnt(msg);
2388 while (msgcount--) { 2390 while (msgcount--) {
2389 msg_set_seqno(m,msg_seqno(msg)); 2391 msg_set_seqno(m,msg_seqno(msg));
2390 tipc_link_tunnel(l_ptr, &tunnel_hdr, m, 2392 tipc_link_tunnel(l_ptr, &tunnel_hdr, m,
diff --git a/net/tipc/msg.h b/net/tipc/msg.h
index 35d5ba1d4f42..ce2659836374 100644
--- a/net/tipc/msg.h
+++ b/net/tipc/msg.h
@@ -72,10 +72,8 @@ static inline void msg_set_bits(struct tipc_msg *m, u32 w,
72 u32 pos, u32 mask, u32 val) 72 u32 pos, u32 mask, u32 val)
73{ 73{
74 val = (val & mask) << pos; 74 val = (val & mask) << pos;
75 val = htonl(val); 75 m->hdr[w] &= ~htonl(mask << pos);
76 mask = htonl(mask << pos); 76 m->hdr[w] |= htonl(val);
77 m->hdr[w] &= ~mask;
78 m->hdr[w] |= val;
79} 77}
80 78
81/* 79/*
diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c
index 9dfc9127acdd..ac7dfdda7973 100644
--- a/net/tipc/name_table.c
+++ b/net/tipc/name_table.c
@@ -501,7 +501,7 @@ end_node:
501 * sequence overlapping with the requested sequence 501 * sequence overlapping with the requested sequence
502 */ 502 */
503 503
504void tipc_nameseq_subscribe(struct name_seq *nseq, struct subscription *s) 504static void tipc_nameseq_subscribe(struct name_seq *nseq, struct subscription *s)
505{ 505{
506 struct sub_seq *sseq = nseq->sseqs; 506 struct sub_seq *sseq = nseq->sseqs;
507 507
@@ -1052,12 +1052,11 @@ int tipc_nametbl_init(void)
1052{ 1052{
1053 int array_size = sizeof(struct hlist_head) * tipc_nametbl_size; 1053 int array_size = sizeof(struct hlist_head) * tipc_nametbl_size;
1054 1054
1055 table.types = kmalloc(array_size, GFP_ATOMIC); 1055 table.types = kzalloc(array_size, GFP_ATOMIC);
1056 if (!table.types) 1056 if (!table.types)
1057 return -ENOMEM; 1057 return -ENOMEM;
1058 1058
1059 write_lock_bh(&tipc_nametbl_lock); 1059 write_lock_bh(&tipc_nametbl_lock);
1060 memset(table.types, 0, array_size);
1061 table.local_publ_count = 0; 1060 table.local_publ_count = 0;
1062 write_unlock_bh(&tipc_nametbl_lock); 1061 write_unlock_bh(&tipc_nametbl_lock);
1063 return 0; 1062 return 0;
diff --git a/net/tipc/node.c b/net/tipc/node.c
index e2e452a62ba1..598f4d3a0098 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -241,8 +241,6 @@ struct node *tipc_node_attach_link(struct link *l_ptr)
241 char addr_string[16]; 241 char addr_string[16];
242 242
243 if (n_ptr->link_cnt >= 2) { 243 if (n_ptr->link_cnt >= 2) {
244 char addr_string[16];
245
246 err("Attempt to create third link to %s\n", 244 err("Attempt to create third link to %s\n",
247 addr_string_fill(addr_string, n_ptr->addr)); 245 addr_string_fill(addr_string, n_ptr->addr));
248 return NULL; 246 return NULL;
diff --git a/net/tipc/port.c b/net/tipc/port.c
index 5d2b9ce84d0a..76088153524c 100644
--- a/net/tipc/port.c
+++ b/net/tipc/port.c
@@ -41,7 +41,6 @@
41#include "addr.h" 41#include "addr.h"
42#include "link.h" 42#include "link.h"
43#include "node.h" 43#include "node.h"
44#include "port.h"
45#include "name_table.h" 44#include "name_table.h"
46#include "user_reg.h" 45#include "user_reg.h"
47#include "msg.h" 46#include "msg.h"
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 4a8f37f48764..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 */
165static int tipc_create(struct socket *sock, int protocol) 165static 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;
@@ -1629,8 +1632,8 @@ static struct proto_ops msg_ops = {
1629 .getsockopt = getsockopt, 1632 .getsockopt = getsockopt,
1630 .sendmsg = send_msg, 1633 .sendmsg = send_msg,
1631 .recvmsg = recv_msg, 1634 .recvmsg = recv_msg,
1632 .mmap = sock_no_mmap, 1635 .mmap = sock_no_mmap,
1633 .sendpage = sock_no_sendpage 1636 .sendpage = sock_no_sendpage
1634}; 1637};
1635 1638
1636static struct proto_ops packet_ops = { 1639static struct proto_ops packet_ops = {
@@ -1650,8 +1653,8 @@ static struct proto_ops packet_ops = {
1650 .getsockopt = getsockopt, 1653 .getsockopt = getsockopt,
1651 .sendmsg = send_packet, 1654 .sendmsg = send_packet,
1652 .recvmsg = recv_msg, 1655 .recvmsg = recv_msg,
1653 .mmap = sock_no_mmap, 1656 .mmap = sock_no_mmap,
1654 .sendpage = sock_no_sendpage 1657 .sendpage = sock_no_sendpage
1655}; 1658};
1656 1659
1657static struct proto_ops stream_ops = { 1660static struct proto_ops stream_ops = {
@@ -1671,8 +1674,8 @@ static struct proto_ops stream_ops = {
1671 .getsockopt = getsockopt, 1674 .getsockopt = getsockopt,
1672 .sendmsg = send_stream, 1675 .sendmsg = send_stream,
1673 .recvmsg = recv_stream, 1676 .recvmsg = recv_stream,
1674 .mmap = sock_no_mmap, 1677 .mmap = sock_no_mmap,
1675 .sendpage = sock_no_sendpage 1678 .sendpage = sock_no_sendpage
1676}; 1679};
1677 1680
1678static struct net_proto_family tipc_family_ops = { 1681static struct net_proto_family tipc_family_ops = {