diff options
Diffstat (limited to 'net/atm/mpc.c')
-rw-r--r-- | net/atm/mpc.c | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/net/atm/mpc.c b/net/atm/mpc.c index c18f73715ef9..cb3c004ff022 100644 --- a/net/atm/mpc.c +++ b/net/atm/mpc.c | |||
@@ -32,7 +32,7 @@ | |||
32 | #include "resources.h" | 32 | #include "resources.h" |
33 | 33 | ||
34 | /* | 34 | /* |
35 | * mpc.c: Implementation of MPOA client kernel part | 35 | * mpc.c: Implementation of MPOA client kernel part |
36 | */ | 36 | */ |
37 | 37 | ||
38 | #if 0 | 38 | #if 0 |
@@ -80,17 +80,17 @@ static struct llc_snap_hdr llc_snap_mpoa_ctrl = { | |||
80 | 0xaa, 0xaa, 0x03, | 80 | 0xaa, 0xaa, 0x03, |
81 | {0x00, 0x00, 0x5e}, | 81 | {0x00, 0x00, 0x5e}, |
82 | {0x00, 0x03} /* For MPOA control PDUs */ | 82 | {0x00, 0x03} /* For MPOA control PDUs */ |
83 | }; | 83 | }; |
84 | static struct llc_snap_hdr llc_snap_mpoa_data = { | 84 | static struct llc_snap_hdr llc_snap_mpoa_data = { |
85 | 0xaa, 0xaa, 0x03, | 85 | 0xaa, 0xaa, 0x03, |
86 | {0x00, 0x00, 0x00}, | 86 | {0x00, 0x00, 0x00}, |
87 | {0x08, 0x00} /* This is for IP PDUs only */ | 87 | {0x08, 0x00} /* This is for IP PDUs only */ |
88 | }; | 88 | }; |
89 | static struct llc_snap_hdr llc_snap_mpoa_data_tagged = { | 89 | static struct llc_snap_hdr llc_snap_mpoa_data_tagged = { |
90 | 0xaa, 0xaa, 0x03, | 90 | 0xaa, 0xaa, 0x03, |
91 | {0x00, 0x00, 0x00}, | 91 | {0x00, 0x00, 0x00}, |
92 | {0x88, 0x4c} /* This is for tagged data PDUs */ | 92 | {0x88, 0x4c} /* This is for tagged data PDUs */ |
93 | }; | 93 | }; |
94 | 94 | ||
95 | static struct notifier_block mpoa_notifier = { | 95 | static struct notifier_block mpoa_notifier = { |
96 | mpoa_event_listener, | 96 | mpoa_event_listener, |
@@ -106,12 +106,12 @@ static DEFINE_TIMER(mpc_timer, NULL, 0, 0); | |||
106 | static struct mpoa_client *find_mpc_by_itfnum(int itf) | 106 | static struct mpoa_client *find_mpc_by_itfnum(int itf) |
107 | { | 107 | { |
108 | struct mpoa_client *mpc; | 108 | struct mpoa_client *mpc; |
109 | 109 | ||
110 | mpc = mpcs; /* our global linked list */ | 110 | mpc = mpcs; /* our global linked list */ |
111 | while (mpc != NULL) { | 111 | while (mpc != NULL) { |
112 | if (mpc->dev_num == itf) | 112 | if (mpc->dev_num == itf) |
113 | return mpc; | 113 | return mpc; |
114 | mpc = mpc->next; | 114 | mpc = mpc->next; |
115 | } | 115 | } |
116 | 116 | ||
117 | return NULL; /* not found */ | 117 | return NULL; /* not found */ |
@@ -120,7 +120,7 @@ static struct mpoa_client *find_mpc_by_itfnum(int itf) | |||
120 | static struct mpoa_client *find_mpc_by_vcc(struct atm_vcc *vcc) | 120 | static struct mpoa_client *find_mpc_by_vcc(struct atm_vcc *vcc) |
121 | { | 121 | { |
122 | struct mpoa_client *mpc; | 122 | struct mpoa_client *mpc; |
123 | 123 | ||
124 | mpc = mpcs; /* our global linked list */ | 124 | mpc = mpcs; /* our global linked list */ |
125 | while (mpc != NULL) { | 125 | while (mpc != NULL) { |
126 | if (mpc->mpoad_vcc == vcc) | 126 | if (mpc->mpoad_vcc == vcc) |
@@ -134,7 +134,7 @@ static struct mpoa_client *find_mpc_by_vcc(struct atm_vcc *vcc) | |||
134 | static struct mpoa_client *find_mpc_by_lec(struct net_device *dev) | 134 | static struct mpoa_client *find_mpc_by_lec(struct net_device *dev) |
135 | { | 135 | { |
136 | struct mpoa_client *mpc; | 136 | struct mpoa_client *mpc; |
137 | 137 | ||
138 | mpc = mpcs; /* our global linked list */ | 138 | mpc = mpcs; /* our global linked list */ |
139 | while (mpc != NULL) { | 139 | while (mpc != NULL) { |
140 | if (mpc->dev == dev) | 140 | if (mpc->dev == dev) |
@@ -190,7 +190,7 @@ struct atm_mpoa_qos *atm_mpoa_search_qos(__be32 dst_ip) | |||
190 | } | 190 | } |
191 | 191 | ||
192 | return qos; | 192 | return qos; |
193 | } | 193 | } |
194 | 194 | ||
195 | /* | 195 | /* |
196 | * Returns 0 for failure | 196 | * Returns 0 for failure |
@@ -245,7 +245,7 @@ static struct net_device *find_lec_by_itfnum(int itf) | |||
245 | 245 | ||
246 | sprintf(name, "lec%d", itf); | 246 | sprintf(name, "lec%d", itf); |
247 | dev = dev_get_by_name(name); | 247 | dev = dev_get_by_name(name); |
248 | 248 | ||
249 | return dev; | 249 | return dev; |
250 | } | 250 | } |
251 | 251 | ||
@@ -265,25 +265,25 @@ static struct mpoa_client *alloc_mpc(void) | |||
265 | mpc->parameters.mpc_p2 = MPC_P2; | 265 | mpc->parameters.mpc_p2 = MPC_P2; |
266 | memset(mpc->parameters.mpc_p3,0,sizeof(mpc->parameters.mpc_p3)); | 266 | memset(mpc->parameters.mpc_p3,0,sizeof(mpc->parameters.mpc_p3)); |
267 | mpc->parameters.mpc_p4 = MPC_P4; | 267 | mpc->parameters.mpc_p4 = MPC_P4; |
268 | mpc->parameters.mpc_p5 = MPC_P5; | 268 | mpc->parameters.mpc_p5 = MPC_P5; |
269 | mpc->parameters.mpc_p6 = MPC_P6; | 269 | mpc->parameters.mpc_p6 = MPC_P6; |
270 | 270 | ||
271 | mpcs = mpc; | 271 | mpcs = mpc; |
272 | 272 | ||
273 | return mpc; | 273 | return mpc; |
274 | } | 274 | } |
275 | 275 | ||
276 | /* | 276 | /* |
277 | * | 277 | * |
278 | * start_mpc() puts the MPC on line. All the packets destined | 278 | * start_mpc() puts the MPC on line. All the packets destined |
279 | * to the lec underneath us are now being monitored and | 279 | * to the lec underneath us are now being monitored and |
280 | * shortcuts will be established. | 280 | * shortcuts will be established. |
281 | * | 281 | * |
282 | */ | 282 | */ |
283 | static void start_mpc(struct mpoa_client *mpc, struct net_device *dev) | 283 | static void start_mpc(struct mpoa_client *mpc, struct net_device *dev) |
284 | { | 284 | { |
285 | 285 | ||
286 | dprintk("mpoa: (%s) start_mpc:\n", mpc->dev->name); | 286 | dprintk("mpoa: (%s) start_mpc:\n", mpc->dev->name); |
287 | if (dev->hard_start_xmit == NULL) { | 287 | if (dev->hard_start_xmit == NULL) { |
288 | printk("mpoa: (%s) start_mpc: dev->hard_start_xmit == NULL, not starting\n", | 288 | printk("mpoa: (%s) start_mpc: dev->hard_start_xmit == NULL, not starting\n", |
289 | dev->name); | 289 | dev->name); |
@@ -297,8 +297,8 @@ static void start_mpc(struct mpoa_client *mpc, struct net_device *dev) | |||
297 | 297 | ||
298 | static void stop_mpc(struct mpoa_client *mpc) | 298 | static void stop_mpc(struct mpoa_client *mpc) |
299 | { | 299 | { |
300 | 300 | ||
301 | dprintk("mpoa: (%s) stop_mpc:", mpc->dev->name); | 301 | dprintk("mpoa: (%s) stop_mpc:", mpc->dev->name); |
302 | 302 | ||
303 | /* Lets not nullify lec device's dev->hard_start_xmit */ | 303 | /* Lets not nullify lec device's dev->hard_start_xmit */ |
304 | if (mpc->dev->hard_start_xmit != mpc_send_packet) { | 304 | if (mpc->dev->hard_start_xmit != mpc_send_packet) { |
@@ -309,7 +309,7 @@ static void stop_mpc(struct mpoa_client *mpc) | |||
309 | mpc->dev->hard_start_xmit = mpc->old_hard_start_xmit; | 309 | mpc->dev->hard_start_xmit = mpc->old_hard_start_xmit; |
310 | mpc->old_hard_start_xmit = NULL; | 310 | mpc->old_hard_start_xmit = NULL; |
311 | /* close_shortcuts(mpc); ??? FIXME */ | 311 | /* close_shortcuts(mpc); ??? FIXME */ |
312 | 312 | ||
313 | return; | 313 | return; |
314 | } | 314 | } |
315 | 315 | ||
@@ -358,7 +358,7 @@ static void lane2_assoc_ind(struct net_device *dev, uint8_t *mac_addr, | |||
358 | uint8_t length, mpoa_device_type, number_of_mps_macs; | 358 | uint8_t length, mpoa_device_type, number_of_mps_macs; |
359 | uint8_t *end_of_tlvs; | 359 | uint8_t *end_of_tlvs; |
360 | struct mpoa_client *mpc; | 360 | struct mpoa_client *mpc; |
361 | 361 | ||
362 | mpoa_device_type = number_of_mps_macs = 0; /* silence gcc */ | 362 | mpoa_device_type = number_of_mps_macs = 0; /* silence gcc */ |
363 | dprintk("mpoa: (%s) lane2_assoc_ind: received TLV(s), ", dev->name); | 363 | dprintk("mpoa: (%s) lane2_assoc_ind: received TLV(s), ", dev->name); |
364 | dprintk("total length of all TLVs %d\n", sizeoftlvs); | 364 | dprintk("total length of all TLVs %d\n", sizeoftlvs); |
@@ -377,7 +377,7 @@ static void lane2_assoc_ind(struct net_device *dev, uint8_t *mac_addr, | |||
377 | printk("TLV value extends past its buffer, aborting parse\n"); | 377 | printk("TLV value extends past its buffer, aborting parse\n"); |
378 | return; | 378 | return; |
379 | } | 379 | } |
380 | 380 | ||
381 | if (type == 0) { | 381 | if (type == 0) { |
382 | printk("mpoa: (%s) lane2_assoc_ind: TLV type was 0, returning\n", dev->name); | 382 | printk("mpoa: (%s) lane2_assoc_ind: TLV type was 0, returning\n", dev->name); |
383 | return; | 383 | return; |
@@ -412,10 +412,10 @@ static void lane2_assoc_ind(struct net_device *dev, uint8_t *mac_addr, | |||
412 | continue; /* someone should read the spec */ | 412 | continue; /* someone should read the spec */ |
413 | } | 413 | } |
414 | dprintk("this MPS has %d MAC addresses\n", number_of_mps_macs); | 414 | dprintk("this MPS has %d MAC addresses\n", number_of_mps_macs); |
415 | 415 | ||
416 | /* ok, now we can go and tell our daemon the control address of MPS */ | 416 | /* ok, now we can go and tell our daemon the control address of MPS */ |
417 | send_set_mps_ctrl_addr(tlvs, mpc); | 417 | send_set_mps_ctrl_addr(tlvs, mpc); |
418 | 418 | ||
419 | tlvs = copy_macs(mpc, mac_addr, tlvs, number_of_mps_macs, mpoa_device_type); | 419 | tlvs = copy_macs(mpc, mac_addr, tlvs, number_of_mps_macs, mpoa_device_type); |
420 | if (tlvs == NULL) return; | 420 | if (tlvs == NULL) return; |
421 | } | 421 | } |
@@ -474,7 +474,7 @@ static int send_via_shortcut(struct sk_buff *skb, struct mpoa_client *mpc) | |||
474 | iph = (struct iphdr *)buff; | 474 | iph = (struct iphdr *)buff; |
475 | ipaddr = iph->daddr; | 475 | ipaddr = iph->daddr; |
476 | 476 | ||
477 | ddprintk("mpoa: (%s) send_via_shortcut: ipaddr 0x%x\n", mpc->dev->name, ipaddr); | 477 | ddprintk("mpoa: (%s) send_via_shortcut: ipaddr 0x%x\n", mpc->dev->name, ipaddr); |
478 | 478 | ||
479 | entry = mpc->in_ops->get(ipaddr, mpc); | 479 | entry = mpc->in_ops->get(ipaddr, mpc); |
480 | if (entry == NULL) { | 480 | if (entry == NULL) { |
@@ -483,15 +483,15 @@ static int send_via_shortcut(struct sk_buff *skb, struct mpoa_client *mpc) | |||
483 | return 1; | 483 | return 1; |
484 | } | 484 | } |
485 | if (mpc->in_ops->cache_hit(entry, mpc) != OPEN){ /* threshold not exceeded or VCC not ready */ | 485 | if (mpc->in_ops->cache_hit(entry, mpc) != OPEN){ /* threshold not exceeded or VCC not ready */ |
486 | ddprintk("mpoa: (%s) send_via_shortcut: cache_hit: returns != OPEN\n", mpc->dev->name); | 486 | ddprintk("mpoa: (%s) send_via_shortcut: cache_hit: returns != OPEN\n", mpc->dev->name); |
487 | mpc->in_ops->put(entry); | 487 | mpc->in_ops->put(entry); |
488 | return 1; | 488 | return 1; |
489 | } | 489 | } |
490 | 490 | ||
491 | ddprintk("mpoa: (%s) send_via_shortcut: using shortcut\n", mpc->dev->name); | 491 | ddprintk("mpoa: (%s) send_via_shortcut: using shortcut\n", mpc->dev->name); |
492 | /* MPOA spec A.1.4, MPOA client must decrement IP ttl at least by one */ | 492 | /* MPOA spec A.1.4, MPOA client must decrement IP ttl at least by one */ |
493 | if (iph->ttl <= 1) { | 493 | if (iph->ttl <= 1) { |
494 | ddprintk("mpoa: (%s) send_via_shortcut: IP ttl = %u, using LANE\n", mpc->dev->name, iph->ttl); | 494 | ddprintk("mpoa: (%s) send_via_shortcut: IP ttl = %u, using LANE\n", mpc->dev->name, iph->ttl); |
495 | mpc->in_ops->put(entry); | 495 | mpc->in_ops->put(entry); |
496 | return 1; | 496 | return 1; |
497 | } | 497 | } |
@@ -529,7 +529,7 @@ static int mpc_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
529 | struct mpoa_client *mpc; | 529 | struct mpoa_client *mpc; |
530 | struct ethhdr *eth; | 530 | struct ethhdr *eth; |
531 | int i = 0; | 531 | int i = 0; |
532 | 532 | ||
533 | mpc = find_mpc_by_lec(dev); /* this should NEVER fail */ | 533 | mpc = find_mpc_by_lec(dev); /* this should NEVER fail */ |
534 | if(mpc == NULL) { | 534 | if(mpc == NULL) { |
535 | printk("mpoa: (%s) mpc_send_packet: no MPC found\n", dev->name); | 535 | printk("mpoa: (%s) mpc_send_packet: no MPC found\n", dev->name); |
@@ -549,7 +549,7 @@ static int mpc_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
549 | 549 | ||
550 | non_ip: | 550 | non_ip: |
551 | retval = mpc->old_hard_start_xmit(skb,dev); | 551 | retval = mpc->old_hard_start_xmit(skb,dev); |
552 | 552 | ||
553 | return retval; | 553 | return retval; |
554 | } | 554 | } |
555 | 555 | ||
@@ -569,11 +569,11 @@ static int atm_mpoa_vcc_attach(struct atm_vcc *vcc, void __user *arg) | |||
569 | ipaddr = ioc_data.ipaddr; | 569 | ipaddr = ioc_data.ipaddr; |
570 | if (ioc_data.dev_num < 0 || ioc_data.dev_num >= MAX_LEC_ITF) | 570 | if (ioc_data.dev_num < 0 || ioc_data.dev_num >= MAX_LEC_ITF) |
571 | return -EINVAL; | 571 | return -EINVAL; |
572 | 572 | ||
573 | mpc = find_mpc_by_itfnum(ioc_data.dev_num); | 573 | mpc = find_mpc_by_itfnum(ioc_data.dev_num); |
574 | if (mpc == NULL) | 574 | if (mpc == NULL) |
575 | return -EINVAL; | 575 | return -EINVAL; |
576 | 576 | ||
577 | if (ioc_data.type == MPC_SOCKET_INGRESS) { | 577 | if (ioc_data.type == MPC_SOCKET_INGRESS) { |
578 | in_entry = mpc->in_ops->get(ipaddr, mpc); | 578 | in_entry = mpc->in_ops->get(ipaddr, mpc); |
579 | if (in_entry == NULL || in_entry->entry_state < INGRESS_RESOLVED) { | 579 | if (in_entry == NULL || in_entry->entry_state < INGRESS_RESOLVED) { |
@@ -604,7 +604,7 @@ static void mpc_vcc_close(struct atm_vcc *vcc, struct net_device *dev) | |||
604 | struct mpoa_client *mpc; | 604 | struct mpoa_client *mpc; |
605 | in_cache_entry *in_entry; | 605 | in_cache_entry *in_entry; |
606 | eg_cache_entry *eg_entry; | 606 | eg_cache_entry *eg_entry; |
607 | 607 | ||
608 | mpc = find_mpc_by_lec(dev); | 608 | mpc = find_mpc_by_lec(dev); |
609 | if (mpc == NULL) { | 609 | if (mpc == NULL) { |
610 | printk("mpoa: (%s) mpc_vcc_close: close for unknown MPC\n", dev->name); | 610 | printk("mpoa: (%s) mpc_vcc_close: close for unknown MPC\n", dev->name); |
@@ -640,14 +640,14 @@ static void mpc_push(struct atm_vcc *vcc, struct sk_buff *skb) | |||
640 | struct mpoa_client *mpc; | 640 | struct mpoa_client *mpc; |
641 | __be32 tag; | 641 | __be32 tag; |
642 | char *tmp; | 642 | char *tmp; |
643 | 643 | ||
644 | ddprintk("mpoa: (%s) mpc_push:\n", dev->name); | 644 | ddprintk("mpoa: (%s) mpc_push:\n", dev->name); |
645 | if (skb == NULL) { | 645 | if (skb == NULL) { |
646 | dprintk("mpoa: (%s) mpc_push: null skb, closing VCC\n", dev->name); | 646 | dprintk("mpoa: (%s) mpc_push: null skb, closing VCC\n", dev->name); |
647 | mpc_vcc_close(vcc, dev); | 647 | mpc_vcc_close(vcc, dev); |
648 | return; | 648 | return; |
649 | } | 649 | } |
650 | 650 | ||
651 | skb->dev = dev; | 651 | skb->dev = dev; |
652 | if (memcmp(skb->data, &llc_snap_mpoa_ctrl, sizeof(struct llc_snap_hdr)) == 0) { | 652 | if (memcmp(skb->data, &llc_snap_mpoa_ctrl, sizeof(struct llc_snap_hdr)) == 0) { |
653 | struct sock *sk = sk_atm(vcc); | 653 | struct sock *sk = sk_atm(vcc); |
@@ -693,11 +693,11 @@ static void mpc_push(struct atm_vcc *vcc, struct sk_buff *skb) | |||
693 | dev_kfree_skb_any(skb); | 693 | dev_kfree_skb_any(skb); |
694 | return; | 694 | return; |
695 | } | 695 | } |
696 | 696 | ||
697 | /* | 697 | /* |
698 | * See if ingress MPC is using shortcut we opened as a return channel. | 698 | * See if ingress MPC is using shortcut we opened as a return channel. |
699 | * This means we have a bi-directional vcc opened by us. | 699 | * This means we have a bi-directional vcc opened by us. |
700 | */ | 700 | */ |
701 | if (eg->shortcut == NULL) { | 701 | if (eg->shortcut == NULL) { |
702 | eg->shortcut = vcc; | 702 | eg->shortcut = vcc; |
703 | printk("mpoa: (%s) mpc_push: egress SVC in use\n", dev->name); | 703 | printk("mpoa: (%s) mpc_push: egress SVC in use\n", dev->name); |
@@ -743,7 +743,7 @@ static int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) | |||
743 | struct mpoa_client *mpc; | 743 | struct mpoa_client *mpc; |
744 | struct lec_priv *priv; | 744 | struct lec_priv *priv; |
745 | int err; | 745 | int err; |
746 | 746 | ||
747 | if (mpcs == NULL) { | 747 | if (mpcs == NULL) { |
748 | init_timer(&mpc_timer); | 748 | init_timer(&mpc_timer); |
749 | mpc_timer_refresh(); | 749 | mpc_timer_refresh(); |
@@ -755,7 +755,7 @@ static int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) | |||
755 | return err; | 755 | return err; |
756 | } | 756 | } |
757 | } | 757 | } |
758 | 758 | ||
759 | mpc = find_mpc_by_itfnum(arg); | 759 | mpc = find_mpc_by_itfnum(arg); |
760 | if (mpc == NULL) { | 760 | if (mpc == NULL) { |
761 | dprintk("mpoa: mpoad_attach: allocating new mpc for itf %d\n", arg); | 761 | dprintk("mpoa: mpoad_attach: allocating new mpc for itf %d\n", arg); |
@@ -776,7 +776,7 @@ static int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) | |||
776 | dev_put(mpc->dev); | 776 | dev_put(mpc->dev); |
777 | mpc->dev = NULL; | 777 | mpc->dev = NULL; |
778 | } else | 778 | } else |
779 | priv->lane2_ops->associate_indicator = lane2_assoc_ind; | 779 | priv->lane2_ops->associate_indicator = lane2_assoc_ind; |
780 | } | 780 | } |
781 | 781 | ||
782 | mpc->mpoad_vcc = vcc; | 782 | mpc->mpoad_vcc = vcc; |
@@ -788,7 +788,7 @@ static int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) | |||
788 | if (mpc->dev) { | 788 | if (mpc->dev) { |
789 | char empty[ATM_ESA_LEN]; | 789 | char empty[ATM_ESA_LEN]; |
790 | memset(empty, 0, ATM_ESA_LEN); | 790 | memset(empty, 0, ATM_ESA_LEN); |
791 | 791 | ||
792 | start_mpc(mpc, mpc->dev); | 792 | start_mpc(mpc, mpc->dev); |
793 | /* set address if mpcd e.g. gets killed and restarted. | 793 | /* set address if mpcd e.g. gets killed and restarted. |
794 | * If we do not do it now we have to wait for the next LE_ARP | 794 | * If we do not do it now we have to wait for the next LE_ARP |
@@ -806,7 +806,7 @@ static void send_set_mps_ctrl_addr(char *addr, struct mpoa_client *mpc) | |||
806 | struct k_message mesg; | 806 | struct k_message mesg; |
807 | 807 | ||
808 | memcpy (mpc->mps_ctrl_addr, addr, ATM_ESA_LEN); | 808 | memcpy (mpc->mps_ctrl_addr, addr, ATM_ESA_LEN); |
809 | 809 | ||
810 | mesg.type = SET_MPS_CTRL_ADDR; | 810 | mesg.type = SET_MPS_CTRL_ADDR; |
811 | memcpy(mesg.MPS_ctrl, addr, ATM_ESA_LEN); | 811 | memcpy(mesg.MPS_ctrl, addr, ATM_ESA_LEN); |
812 | msg_to_mpoad(&mesg, mpc); | 812 | msg_to_mpoad(&mesg, mpc); |
@@ -828,7 +828,7 @@ static void mpoad_close(struct atm_vcc *vcc) | |||
828 | printk("mpoa: mpoad_close: close for non-present mpoad\n"); | 828 | printk("mpoa: mpoad_close: close for non-present mpoad\n"); |
829 | return; | 829 | return; |
830 | } | 830 | } |
831 | 831 | ||
832 | mpc->mpoad_vcc = NULL; | 832 | mpc->mpoad_vcc = NULL; |
833 | if (mpc->dev) { | 833 | if (mpc->dev) { |
834 | struct lec_priv *priv = (struct lec_priv *)mpc->dev->priv; | 834 | struct lec_priv *priv = (struct lec_priv *)mpc->dev->priv; |
@@ -844,7 +844,7 @@ static void mpoad_close(struct atm_vcc *vcc) | |||
844 | atm_return(vcc, skb->truesize); | 844 | atm_return(vcc, skb->truesize); |
845 | kfree_skb(skb); | 845 | kfree_skb(skb); |
846 | } | 846 | } |
847 | 847 | ||
848 | printk("mpoa: (%s) going down\n", | 848 | printk("mpoa: (%s) going down\n", |
849 | (mpc->dev) ? mpc->dev->name : "<unknown>"); | 849 | (mpc->dev) ? mpc->dev->name : "<unknown>"); |
850 | module_put(THIS_MODULE); | 850 | module_put(THIS_MODULE); |
@@ -857,11 +857,11 @@ static void mpoad_close(struct atm_vcc *vcc) | |||
857 | */ | 857 | */ |
858 | static int msg_from_mpoad(struct atm_vcc *vcc, struct sk_buff *skb) | 858 | static int msg_from_mpoad(struct atm_vcc *vcc, struct sk_buff *skb) |
859 | { | 859 | { |
860 | 860 | ||
861 | struct mpoa_client *mpc = find_mpc_by_vcc(vcc); | 861 | struct mpoa_client *mpc = find_mpc_by_vcc(vcc); |
862 | struct k_message *mesg = (struct k_message*)skb->data; | 862 | struct k_message *mesg = (struct k_message*)skb->data; |
863 | atomic_sub(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); | 863 | atomic_sub(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); |
864 | 864 | ||
865 | if (mpc == NULL) { | 865 | if (mpc == NULL) { |
866 | printk("mpoa: msg_from_mpoad: no mpc found\n"); | 866 | printk("mpoa: msg_from_mpoad: no mpc found\n"); |
867 | return 0; | 867 | return 0; |
@@ -938,7 +938,7 @@ int msg_to_mpoad(struct k_message *mesg, struct mpoa_client *mpc) | |||
938 | skb_put(skb, sizeof(struct k_message)); | 938 | skb_put(skb, sizeof(struct k_message)); |
939 | memcpy(skb->data, mesg, sizeof(struct k_message)); | 939 | memcpy(skb->data, mesg, sizeof(struct k_message)); |
940 | atm_force_charge(mpc->mpoad_vcc, skb->truesize); | 940 | atm_force_charge(mpc->mpoad_vcc, skb->truesize); |
941 | 941 | ||
942 | sk = sk_atm(mpc->mpoad_vcc); | 942 | sk = sk_atm(mpc->mpoad_vcc); |
943 | skb_queue_tail(&sk->sk_receive_queue, skb); | 943 | skb_queue_tail(&sk->sk_receive_queue, skb); |
944 | sk->sk_data_ready(sk, skb->len); | 944 | sk->sk_data_ready(sk, skb->len); |
@@ -955,7 +955,7 @@ static int mpoa_event_listener(struct notifier_block *mpoa_notifier, unsigned lo | |||
955 | dev = (struct net_device *)dev_ptr; | 955 | dev = (struct net_device *)dev_ptr; |
956 | if (dev->name == NULL || strncmp(dev->name, "lec", 3)) | 956 | if (dev->name == NULL || strncmp(dev->name, "lec", 3)) |
957 | return NOTIFY_DONE; /* we are only interested in lec:s */ | 957 | return NOTIFY_DONE; /* we are only interested in lec:s */ |
958 | 958 | ||
959 | switch (event) { | 959 | switch (event) { |
960 | case NETDEV_REGISTER: /* a new lec device was allocated */ | 960 | case NETDEV_REGISTER: /* a new lec device was allocated */ |
961 | priv = (struct lec_priv *)dev->priv; | 961 | priv = (struct lec_priv *)dev->priv; |
@@ -1043,7 +1043,7 @@ static void MPOA_trigger_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1043 | mpc->in_ops->put(entry); | 1043 | mpc->in_ops->put(entry); |
1044 | return; | 1044 | return; |
1045 | } | 1045 | } |
1046 | 1046 | ||
1047 | if(entry->entry_state == INGRESS_INVALID){ | 1047 | if(entry->entry_state == INGRESS_INVALID){ |
1048 | entry->entry_state = INGRESS_RESOLVING; | 1048 | entry->entry_state = INGRESS_RESOLVING; |
1049 | msg->type = SND_MPOA_RES_RQST; | 1049 | msg->type = SND_MPOA_RES_RQST; |
@@ -1053,7 +1053,7 @@ static void MPOA_trigger_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1053 | mpc->in_ops->put(entry); | 1053 | mpc->in_ops->put(entry); |
1054 | return; | 1054 | return; |
1055 | } | 1055 | } |
1056 | 1056 | ||
1057 | printk("mpoa: (%s) MPOA_trigger_rcvd: entry already in resolving state\n", | 1057 | printk("mpoa: (%s) MPOA_trigger_rcvd: entry already in resolving state\n", |
1058 | (mpc->dev) ? mpc->dev->name : "<unknown>"); | 1058 | (mpc->dev) ? mpc->dev->name : "<unknown>"); |
1059 | mpc->in_ops->put(entry); | 1059 | mpc->in_ops->put(entry); |
@@ -1062,7 +1062,7 @@ static void MPOA_trigger_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1062 | 1062 | ||
1063 | /* | 1063 | /* |
1064 | * Things get complicated because we have to check if there's an egress | 1064 | * Things get complicated because we have to check if there's an egress |
1065 | * shortcut with suitable traffic parameters we could use. | 1065 | * shortcut with suitable traffic parameters we could use. |
1066 | */ | 1066 | */ |
1067 | static void check_qos_and_open_shortcut(struct k_message *msg, struct mpoa_client *client, in_cache_entry *entry) | 1067 | static void check_qos_and_open_shortcut(struct k_message *msg, struct mpoa_client *client, in_cache_entry *entry) |
1068 | { | 1068 | { |
@@ -1079,7 +1079,7 @@ static void check_qos_and_open_shortcut(struct k_message *msg, struct mpoa_clien | |||
1079 | else if(eg_entry->shortcut->qos.txtp.max_pcr > 0) | 1079 | else if(eg_entry->shortcut->qos.txtp.max_pcr > 0) |
1080 | entry->shortcut = eg_entry->shortcut; | 1080 | entry->shortcut = eg_entry->shortcut; |
1081 | } | 1081 | } |
1082 | if(entry->shortcut){ | 1082 | if(entry->shortcut){ |
1083 | dprintk("mpoa: (%s) using egress SVC to reach %u.%u.%u.%u\n",client->dev->name, NIPQUAD(dst_ip)); | 1083 | dprintk("mpoa: (%s) using egress SVC to reach %u.%u.%u.%u\n",client->dev->name, NIPQUAD(dst_ip)); |
1084 | client->eg_ops->put(eg_entry); | 1084 | client->eg_ops->put(eg_entry); |
1085 | return; | 1085 | return; |
@@ -1094,7 +1094,7 @@ static void check_qos_and_open_shortcut(struct k_message *msg, struct mpoa_clien | |||
1094 | { | 1094 | { |
1095 | msg->qos = qos->qos; | 1095 | msg->qos = qos->qos; |
1096 | printk("mpoa: (%s) trying to get a CBR shortcut\n",client->dev->name); | 1096 | printk("mpoa: (%s) trying to get a CBR shortcut\n",client->dev->name); |
1097 | } | 1097 | } |
1098 | else memset(&msg->qos,0,sizeof(struct atm_qos)); | 1098 | else memset(&msg->qos,0,sizeof(struct atm_qos)); |
1099 | msg_to_mpoad(msg, client); | 1099 | msg_to_mpoad(msg, client); |
1100 | return; | 1100 | return; |
@@ -1111,7 +1111,7 @@ static void MPOA_res_reply_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1111 | printk("\nmpoa: (%s) ARGH, received res. reply for an entry that doesn't exist.\n", mpc->dev->name); | 1111 | printk("\nmpoa: (%s) ARGH, received res. reply for an entry that doesn't exist.\n", mpc->dev->name); |
1112 | return; | 1112 | return; |
1113 | } | 1113 | } |
1114 | ddprintk(" entry_state = %d ", entry->entry_state); | 1114 | ddprintk(" entry_state = %d ", entry->entry_state); |
1115 | 1115 | ||
1116 | if (entry->entry_state == INGRESS_RESOLVED) { | 1116 | if (entry->entry_state == INGRESS_RESOLVED) { |
1117 | printk("\nmpoa: (%s) MPOA_res_reply_rcvd for RESOLVED entry!\n", mpc->dev->name); | 1117 | printk("\nmpoa: (%s) MPOA_res_reply_rcvd for RESOLVED entry!\n", mpc->dev->name); |
@@ -1126,7 +1126,7 @@ static void MPOA_res_reply_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1126 | ddprintk("entry->shortcut = %p\n", entry->shortcut); | 1126 | ddprintk("entry->shortcut = %p\n", entry->shortcut); |
1127 | 1127 | ||
1128 | if(entry->entry_state == INGRESS_RESOLVING && entry->shortcut != NULL){ | 1128 | if(entry->entry_state == INGRESS_RESOLVING && entry->shortcut != NULL){ |
1129 | entry->entry_state = INGRESS_RESOLVED; | 1129 | entry->entry_state = INGRESS_RESOLVED; |
1130 | mpc->in_ops->put(entry); | 1130 | mpc->in_ops->put(entry); |
1131 | return; /* Shortcut already open... */ | 1131 | return; /* Shortcut already open... */ |
1132 | } | 1132 | } |
@@ -1137,7 +1137,7 @@ static void MPOA_res_reply_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1137 | mpc->in_ops->put(entry); | 1137 | mpc->in_ops->put(entry); |
1138 | return; | 1138 | return; |
1139 | } | 1139 | } |
1140 | 1140 | ||
1141 | check_qos_and_open_shortcut(msg, mpc, entry); | 1141 | check_qos_and_open_shortcut(msg, mpc, entry); |
1142 | entry->entry_state = INGRESS_RESOLVED; | 1142 | entry->entry_state = INGRESS_RESOLVED; |
1143 | mpc->in_ops->put(entry); | 1143 | mpc->in_ops->put(entry); |
@@ -1169,13 +1169,13 @@ static void ingress_purge_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1169 | } while (entry != NULL); | 1169 | } while (entry != NULL); |
1170 | 1170 | ||
1171 | return; | 1171 | return; |
1172 | } | 1172 | } |
1173 | 1173 | ||
1174 | static void egress_purge_rcvd(struct k_message *msg, struct mpoa_client *mpc) | 1174 | static void egress_purge_rcvd(struct k_message *msg, struct mpoa_client *mpc) |
1175 | { | 1175 | { |
1176 | __be32 cache_id = msg->content.eg_info.cache_id; | 1176 | __be32 cache_id = msg->content.eg_info.cache_id; |
1177 | eg_cache_entry *entry = mpc->eg_ops->get_by_cache_id(cache_id, mpc); | 1177 | eg_cache_entry *entry = mpc->eg_ops->get_by_cache_id(cache_id, mpc); |
1178 | 1178 | ||
1179 | if (entry == NULL) { | 1179 | if (entry == NULL) { |
1180 | dprintk("mpoa: (%s) egress_purge_rcvd: purge for a non-existing entry\n", mpc->dev->name); | 1180 | dprintk("mpoa: (%s) egress_purge_rcvd: purge for a non-existing entry\n", mpc->dev->name); |
1181 | return; | 1181 | return; |
@@ -1188,7 +1188,7 @@ static void egress_purge_rcvd(struct k_message *msg, struct mpoa_client *mpc) | |||
1188 | mpc->eg_ops->put(entry); | 1188 | mpc->eg_ops->put(entry); |
1189 | 1189 | ||
1190 | return; | 1190 | return; |
1191 | } | 1191 | } |
1192 | 1192 | ||
1193 | static void purge_egress_shortcut(struct atm_vcc *vcc, eg_cache_entry *entry) | 1193 | static void purge_egress_shortcut(struct atm_vcc *vcc, eg_cache_entry *entry) |
1194 | { | 1194 | { |
@@ -1259,7 +1259,7 @@ static void MPOA_cache_impos_rcvd( struct k_message * msg, struct mpoa_client * | |||
1259 | { | 1259 | { |
1260 | uint16_t holding_time; | 1260 | uint16_t holding_time; |
1261 | eg_cache_entry *entry = mpc->eg_ops->get_by_cache_id(msg->content.eg_info.cache_id, mpc); | 1261 | eg_cache_entry *entry = mpc->eg_ops->get_by_cache_id(msg->content.eg_info.cache_id, mpc); |
1262 | 1262 | ||
1263 | holding_time = msg->content.eg_info.holding_time; | 1263 | holding_time = msg->content.eg_info.holding_time; |
1264 | dprintk("mpoa: (%s) MPOA_cache_impos_rcvd: entry = %p, holding_time = %u\n", | 1264 | dprintk("mpoa: (%s) MPOA_cache_impos_rcvd: entry = %p, holding_time = %u\n", |
1265 | mpc->dev->name, entry, holding_time); | 1265 | mpc->dev->name, entry, holding_time); |
@@ -1272,13 +1272,13 @@ static void MPOA_cache_impos_rcvd( struct k_message * msg, struct mpoa_client * | |||
1272 | mpc->eg_ops->update(entry, holding_time); | 1272 | mpc->eg_ops->update(entry, holding_time); |
1273 | return; | 1273 | return; |
1274 | } | 1274 | } |
1275 | 1275 | ||
1276 | write_lock_irq(&mpc->egress_lock); | 1276 | write_lock_irq(&mpc->egress_lock); |
1277 | mpc->eg_ops->remove_entry(entry, mpc); | 1277 | mpc->eg_ops->remove_entry(entry, mpc); |
1278 | write_unlock_irq(&mpc->egress_lock); | 1278 | write_unlock_irq(&mpc->egress_lock); |
1279 | 1279 | ||
1280 | mpc->eg_ops->put(entry); | 1280 | mpc->eg_ops->put(entry); |
1281 | 1281 | ||
1282 | return; | 1282 | return; |
1283 | } | 1283 | } |
1284 | 1284 | ||
@@ -1328,7 +1328,7 @@ static void set_mps_mac_addr_rcvd(struct k_message *msg, struct mpoa_client *cli | |||
1328 | return; | 1328 | return; |
1329 | } | 1329 | } |
1330 | client->number_of_mps_macs = 1; | 1330 | client->number_of_mps_macs = 1; |
1331 | 1331 | ||
1332 | return; | 1332 | return; |
1333 | } | 1333 | } |
1334 | 1334 | ||
@@ -1364,7 +1364,7 @@ static void mpc_timer_refresh(void) | |||
1364 | mpc_timer.data = mpc_timer.expires; | 1364 | mpc_timer.data = mpc_timer.expires; |
1365 | mpc_timer.function = mpc_cache_check; | 1365 | mpc_timer.function = mpc_cache_check; |
1366 | add_timer(&mpc_timer); | 1366 | add_timer(&mpc_timer); |
1367 | 1367 | ||
1368 | return; | 1368 | return; |
1369 | } | 1369 | } |
1370 | 1370 | ||
@@ -1373,7 +1373,7 @@ static void mpc_cache_check( unsigned long checking_time ) | |||
1373 | struct mpoa_client *mpc = mpcs; | 1373 | struct mpoa_client *mpc = mpcs; |
1374 | static unsigned long previous_resolving_check_time; | 1374 | static unsigned long previous_resolving_check_time; |
1375 | static unsigned long previous_refresh_time; | 1375 | static unsigned long previous_refresh_time; |
1376 | 1376 | ||
1377 | while( mpc != NULL ){ | 1377 | while( mpc != NULL ){ |
1378 | mpc->in_ops->clear_count(mpc); | 1378 | mpc->in_ops->clear_count(mpc); |
1379 | mpc->eg_ops->clear_expired(mpc); | 1379 | mpc->eg_ops->clear_expired(mpc); |
@@ -1388,7 +1388,7 @@ static void mpc_cache_check( unsigned long checking_time ) | |||
1388 | mpc = mpc->next; | 1388 | mpc = mpc->next; |
1389 | } | 1389 | } |
1390 | mpc_timer_refresh(); | 1390 | mpc_timer_refresh(); |
1391 | 1391 | ||
1392 | return; | 1392 | return; |
1393 | } | 1393 | } |
1394 | 1394 | ||