diff options
author | Joe Perches <joe@perches.com> | 2012-02-19 22:52:38 -0500 |
---|---|---|
committer | Joe Perches <joe@perches.com> | 2012-02-21 12:04:01 -0500 |
commit | 475be4d85a274d0961593db41cf85689db1d583c (patch) | |
tree | b2b8931eb747794730522c3cf1898e46948527b9 /drivers/isdn/i4l/isdn_ppp.c | |
parent | 0b0a635f79f91f3755b6518627ea06dd0dbfd523 (diff) |
isdn: whitespace coding style cleanup
isdn source code uses a not-current coding style.
Update the coding style used on a per-line basis
so that git diff -w shows only elided blank lines
at EOF.
Done with emacs and some scripts and some typing.
Built x86 allyesconfig.
No detected change in objdump -d or size.
Signed-off-by: Joe Perches <joe@perches.com>
Diffstat (limited to 'drivers/isdn/i4l/isdn_ppp.c')
-rw-r--r-- | drivers/isdn/i4l/isdn_ppp.c | 1442 |
1 files changed, 721 insertions, 721 deletions
diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c index e38f674a7bd3..a1e760150821 100644 --- a/drivers/isdn/i4l/isdn_ppp.c +++ b/drivers/isdn/i4l/isdn_ppp.c | |||
@@ -28,18 +28,18 @@ | |||
28 | /* Prototypes */ | 28 | /* Prototypes */ |
29 | static int isdn_ppp_fill_rq(unsigned char *buf, int len, int proto, int slot); | 29 | static int isdn_ppp_fill_rq(unsigned char *buf, int len, int proto, int slot); |
30 | static int isdn_ppp_closewait(int slot); | 30 | static int isdn_ppp_closewait(int slot); |
31 | static void isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, | 31 | static void isdn_ppp_push_higher(isdn_net_dev *net_dev, isdn_net_local *lp, |
32 | struct sk_buff *skb, int proto); | 32 | struct sk_buff *skb, int proto); |
33 | static int isdn_ppp_if_get_unit(char *namebuf); | 33 | static int isdn_ppp_if_get_unit(char *namebuf); |
34 | static int isdn_ppp_set_compressor(struct ippp_struct *is,struct isdn_ppp_comp_data *); | 34 | static int isdn_ppp_set_compressor(struct ippp_struct *is, struct isdn_ppp_comp_data *); |
35 | static struct sk_buff *isdn_ppp_decompress(struct sk_buff *, | 35 | static struct sk_buff *isdn_ppp_decompress(struct sk_buff *, |
36 | struct ippp_struct *,struct ippp_struct *,int *proto); | 36 | struct ippp_struct *, struct ippp_struct *, int *proto); |
37 | static void isdn_ppp_receive_ccp(isdn_net_dev * net_dev, isdn_net_local * lp, | 37 | static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, |
38 | struct sk_buff *skb,int proto); | 38 | struct sk_buff *skb, int proto); |
39 | static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in,int *proto, | 39 | static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in, int *proto, |
40 | struct ippp_struct *is,struct ippp_struct *master,int type); | 40 | struct ippp_struct *is, struct ippp_struct *master, int type); |
41 | static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | 41 | static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, |
42 | struct sk_buff *skb); | 42 | struct sk_buff *skb); |
43 | 43 | ||
44 | /* New CCP stuff */ | 44 | /* New CCP stuff */ |
45 | static void isdn_ppp_ccp_kickup(struct ippp_struct *is); | 45 | static void isdn_ppp_ccp_kickup(struct ippp_struct *is); |
@@ -52,7 +52,7 @@ static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is, | |||
52 | unsigned char id); | 52 | unsigned char id); |
53 | static void isdn_ppp_ccp_timer_callback(unsigned long closure); | 53 | static void isdn_ppp_ccp_timer_callback(unsigned long closure); |
54 | static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is, | 54 | static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is, |
55 | unsigned char id); | 55 | unsigned char id); |
56 | static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | 56 | static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, |
57 | struct isdn_ppp_resetparams *rp); | 57 | struct isdn_ppp_resetparams *rp); |
58 | static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, | 58 | static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, |
@@ -61,17 +61,17 @@ static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, | |||
61 | 61 | ||
62 | 62 | ||
63 | #ifdef CONFIG_ISDN_MPP | 63 | #ifdef CONFIG_ISDN_MPP |
64 | static ippp_bundle * isdn_ppp_bundle_arr = NULL; | 64 | static ippp_bundle *isdn_ppp_bundle_arr = NULL; |
65 | 65 | ||
66 | static int isdn_ppp_mp_bundle_array_init(void); | 66 | static int isdn_ppp_mp_bundle_array_init(void); |
67 | static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to ); | 67 | static int isdn_ppp_mp_init(isdn_net_local *lp, ippp_bundle *add_to); |
68 | static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, | 68 | static void isdn_ppp_mp_receive(isdn_net_dev *net_dev, isdn_net_local *lp, |
69 | struct sk_buff *skb); | 69 | struct sk_buff *skb); |
70 | static void isdn_ppp_mp_cleanup( isdn_net_local * lp ); | 70 | static void isdn_ppp_mp_cleanup(isdn_net_local *lp); |
71 | 71 | ||
72 | static int isdn_ppp_bundle(struct ippp_struct *, int unit); | 72 | static int isdn_ppp_bundle(struct ippp_struct *, int unit); |
73 | #endif /* CONFIG_ISDN_MPP */ | 73 | #endif /* CONFIG_ISDN_MPP */ |
74 | 74 | ||
75 | char *isdn_ppp_revision = "$Revision: 1.1.2.3 $"; | 75 | char *isdn_ppp_revision = "$Revision: 1.1.2.3 $"; |
76 | 76 | ||
77 | static struct ippp_struct *ippp_table[ISDN_MAX_CHANNELS]; | 77 | static struct ippp_struct *ippp_table[ISDN_MAX_CHANNELS]; |
@@ -82,11 +82,11 @@ static struct isdn_ppp_compressor *ipc_head = NULL; | |||
82 | * frame log (debug) | 82 | * frame log (debug) |
83 | */ | 83 | */ |
84 | static void | 84 | static void |
85 | isdn_ppp_frame_log(char *info, char *data, int len, int maxlen,int unit,int slot) | 85 | isdn_ppp_frame_log(char *info, char *data, int len, int maxlen, int unit, int slot) |
86 | { | 86 | { |
87 | int cnt, | 87 | int cnt, |
88 | j, | 88 | j, |
89 | i; | 89 | i; |
90 | char buf[80]; | 90 | char buf[80]; |
91 | 91 | ||
92 | if (len < maxlen) | 92 | if (len < maxlen) |
@@ -94,8 +94,8 @@ isdn_ppp_frame_log(char *info, char *data, int len, int maxlen,int unit,int slot | |||
94 | 94 | ||
95 | for (i = 0, cnt = 0; cnt < maxlen; i++) { | 95 | for (i = 0, cnt = 0; cnt < maxlen; i++) { |
96 | for (j = 0; j < 16 && cnt < maxlen; j++, cnt++) | 96 | for (j = 0; j < 16 && cnt < maxlen; j++, cnt++) |
97 | sprintf(buf + j * 3, "%02x ", (unsigned char) data[cnt]); | 97 | sprintf(buf + j * 3, "%02x ", (unsigned char)data[cnt]); |
98 | printk(KERN_DEBUG "[%d/%d].%s[%d]: %s\n",unit,slot, info, i, buf); | 98 | printk(KERN_DEBUG "[%d/%d].%s[%d]: %s\n", unit, slot, info, i, buf); |
99 | } | 99 | } |
100 | } | 100 | } |
101 | 101 | ||
@@ -105,13 +105,13 @@ isdn_ppp_frame_log(char *info, char *data, int len, int maxlen,int unit,int slot | |||
105 | * in this case we bind another lp to the master device | 105 | * in this case we bind another lp to the master device |
106 | */ | 106 | */ |
107 | int | 107 | int |
108 | isdn_ppp_free(isdn_net_local * lp) | 108 | isdn_ppp_free(isdn_net_local *lp) |
109 | { | 109 | { |
110 | struct ippp_struct *is; | 110 | struct ippp_struct *is; |
111 | 111 | ||
112 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | 112 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { |
113 | printk(KERN_ERR "%s: ppp_slot(%d) out of range\n", | 113 | printk(KERN_ERR "%s: ppp_slot(%d) out of range\n", |
114 | __func__, lp->ppp_slot); | 114 | __func__, lp->ppp_slot); |
115 | return 0; | 115 | return 0; |
116 | } | 116 | } |
117 | 117 | ||
@@ -128,7 +128,7 @@ isdn_ppp_free(isdn_net_local * lp) | |||
128 | #endif /* CONFIG_ISDN_MPP */ | 128 | #endif /* CONFIG_ISDN_MPP */ |
129 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | 129 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { |
130 | printk(KERN_ERR "%s: ppp_slot(%d) now invalid\n", | 130 | printk(KERN_ERR "%s: ppp_slot(%d) now invalid\n", |
131 | __func__, lp->ppp_slot); | 131 | __func__, lp->ppp_slot); |
132 | return 0; | 132 | return 0; |
133 | } | 133 | } |
134 | is = ippp_table[lp->ppp_slot]; | 134 | is = ippp_table[lp->ppp_slot]; |
@@ -153,7 +153,7 @@ isdn_ppp_free(isdn_net_local * lp) | |||
153 | * no additional lock is needed | 153 | * no additional lock is needed |
154 | */ | 154 | */ |
155 | int | 155 | int |
156 | isdn_ppp_bind(isdn_net_local * lp) | 156 | isdn_ppp_bind(isdn_net_local *lp) |
157 | { | 157 | { |
158 | int i; | 158 | int i; |
159 | int unit = 0; | 159 | int unit = 0; |
@@ -195,11 +195,11 @@ isdn_ppp_bind(isdn_net_local * lp) | |||
195 | unit = isdn_ppp_if_get_unit(lp->netdev->dev->name); | 195 | unit = isdn_ppp_if_get_unit(lp->netdev->dev->name); |
196 | if (unit < 0) { | 196 | if (unit < 0) { |
197 | printk(KERN_ERR "isdn_ppp_bind: illegal interface name %s.\n", | 197 | printk(KERN_ERR "isdn_ppp_bind: illegal interface name %s.\n", |
198 | lp->netdev->dev->name); | 198 | lp->netdev->dev->name); |
199 | retval = -1; | 199 | retval = -1; |
200 | goto out; | 200 | goto out; |
201 | } | 201 | } |
202 | 202 | ||
203 | lp->ppp_slot = i; | 203 | lp->ppp_slot = i; |
204 | is = ippp_table[i]; | 204 | is = ippp_table[i]; |
205 | is->lp = lp; | 205 | is->lp = lp; |
@@ -213,7 +213,7 @@ isdn_ppp_bind(isdn_net_local * lp) | |||
213 | 213 | ||
214 | retval = lp->ppp_slot; | 214 | retval = lp->ppp_slot; |
215 | 215 | ||
216 | out: | 216 | out: |
217 | return retval; | 217 | return retval; |
218 | } | 218 | } |
219 | 219 | ||
@@ -223,11 +223,11 @@ isdn_ppp_bind(isdn_net_local * lp) | |||
223 | */ | 223 | */ |
224 | 224 | ||
225 | void | 225 | void |
226 | isdn_ppp_wakeup_daemon(isdn_net_local * lp) | 226 | isdn_ppp_wakeup_daemon(isdn_net_local *lp) |
227 | { | 227 | { |
228 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | 228 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { |
229 | printk(KERN_ERR "%s: ppp_slot(%d) out of range\n", | 229 | printk(KERN_ERR "%s: ppp_slot(%d) out of range\n", |
230 | __func__, lp->ppp_slot); | 230 | __func__, lp->ppp_slot); |
231 | return; | 231 | return; |
232 | } | 232 | } |
233 | ippp_table[lp->ppp_slot]->state = IPPP_OPEN | IPPP_CONNECT | IPPP_NOBLOCK; | 233 | ippp_table[lp->ppp_slot]->state = IPPP_OPEN | IPPP_CONNECT | IPPP_NOBLOCK; |
@@ -246,7 +246,7 @@ isdn_ppp_closewait(int slot) | |||
246 | 246 | ||
247 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 247 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
248 | printk(KERN_ERR "%s: slot(%d) out of range\n", | 248 | printk(KERN_ERR "%s: slot(%d) out of range\n", |
249 | __func__, slot); | 249 | __func__, slot); |
250 | return 0; | 250 | return 0; |
251 | } | 251 | } |
252 | is = ippp_table[slot]; | 252 | is = ippp_table[slot]; |
@@ -289,7 +289,7 @@ isdn_ppp_open(int min, struct file *file) | |||
289 | return -EBUSY; | 289 | return -EBUSY; |
290 | } | 290 | } |
291 | is = file->private_data = ippp_table[slot]; | 291 | is = file->private_data = ippp_table[slot]; |
292 | 292 | ||
293 | printk(KERN_DEBUG "ippp, open, slot: %d, minor: %d, state: %04x\n", | 293 | printk(KERN_DEBUG "ippp, open, slot: %d, minor: %d, state: %04x\n", |
294 | slot, min, is->state); | 294 | slot, min, is->state); |
295 | 295 | ||
@@ -385,21 +385,21 @@ isdn_ppp_release(int min, struct file *file) | |||
385 | #endif | 385 | #endif |
386 | 386 | ||
387 | /* TODO: if this was the previous master: link the stuff to the new master */ | 387 | /* TODO: if this was the previous master: link the stuff to the new master */ |
388 | if(is->comp_stat) | 388 | if (is->comp_stat) |
389 | is->compressor->free(is->comp_stat); | 389 | is->compressor->free(is->comp_stat); |
390 | if(is->link_comp_stat) | 390 | if (is->link_comp_stat) |
391 | is->link_compressor->free(is->link_comp_stat); | 391 | is->link_compressor->free(is->link_comp_stat); |
392 | if(is->link_decomp_stat) | 392 | if (is->link_decomp_stat) |
393 | is->link_decompressor->free(is->link_decomp_stat); | 393 | is->link_decompressor->free(is->link_decomp_stat); |
394 | if(is->decomp_stat) | 394 | if (is->decomp_stat) |
395 | is->decompressor->free(is->decomp_stat); | 395 | is->decompressor->free(is->decomp_stat); |
396 | is->compressor = is->link_compressor = NULL; | 396 | is->compressor = is->link_compressor = NULL; |
397 | is->decompressor = is->link_decompressor = NULL; | 397 | is->decompressor = is->link_decompressor = NULL; |
398 | is->comp_stat = is->link_comp_stat = NULL; | 398 | is->comp_stat = is->link_comp_stat = NULL; |
399 | is->decomp_stat = is->link_decomp_stat = NULL; | 399 | is->decomp_stat = is->link_decomp_stat = NULL; |
400 | 400 | ||
401 | /* Clean up if necessary */ | 401 | /* Clean up if necessary */ |
402 | if(is->reset) | 402 | if (is->reset) |
403 | isdn_ppp_ccp_reset_free(is); | 403 | isdn_ppp_ccp_reset_free(is); |
404 | 404 | ||
405 | /* this slot is ready for new connections */ | 405 | /* this slot is ready for new connections */ |
@@ -423,9 +423,9 @@ get_arg(void __user *b, void *val, int len) | |||
423 | * set arg .. ioctl helper | 423 | * set arg .. ioctl helper |
424 | */ | 424 | */ |
425 | static int | 425 | static int |
426 | set_arg(void __user *b, void *val,int len) | 426 | set_arg(void __user *b, void *val, int len) |
427 | { | 427 | { |
428 | if(len <= 0) | 428 | if (len <= 0) |
429 | len = sizeof(void *); | 429 | len = sizeof(void *); |
430 | if (copy_to_user(b, val, len)) | 430 | if (copy_to_user(b, val, len)) |
431 | return -EFAULT; | 431 | return -EFAULT; |
@@ -471,7 +471,7 @@ int | |||
471 | isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg) | 471 | isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg) |
472 | { | 472 | { |
473 | unsigned long val; | 473 | unsigned long val; |
474 | int r,i,j; | 474 | int r, i, j; |
475 | struct ippp_struct *is; | 475 | struct ippp_struct *is; |
476 | isdn_net_local *lp; | 476 | isdn_net_local *lp; |
477 | struct isdn_ppp_comp_data data; | 477 | struct isdn_ppp_comp_data data; |
@@ -487,177 +487,177 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg) | |||
487 | return -EINVAL; | 487 | return -EINVAL; |
488 | 488 | ||
489 | switch (cmd) { | 489 | switch (cmd) { |
490 | case PPPIOCBUNDLE: | 490 | case PPPIOCBUNDLE: |
491 | #ifdef CONFIG_ISDN_MPP | 491 | #ifdef CONFIG_ISDN_MPP |
492 | if (!(is->state & IPPP_CONNECT)) | 492 | if (!(is->state & IPPP_CONNECT)) |
493 | return -EINVAL; | 493 | return -EINVAL; |
494 | if ((r = get_arg(argp, &val, sizeof(val) ))) | 494 | if ((r = get_arg(argp, &val, sizeof(val)))) |
495 | return r; | 495 | return r; |
496 | printk(KERN_DEBUG "iPPP-bundle: minor: %d, slave unit: %d, master unit: %d\n", | 496 | printk(KERN_DEBUG "iPPP-bundle: minor: %d, slave unit: %d, master unit: %d\n", |
497 | (int) min, (int) is->unit, (int) val); | 497 | (int) min, (int) is->unit, (int) val); |
498 | return isdn_ppp_bundle(is, val); | 498 | return isdn_ppp_bundle(is, val); |
499 | #else | 499 | #else |
500 | return -1; | 500 | return -1; |
501 | #endif | 501 | #endif |
502 | break; | 502 | break; |
503 | case PPPIOCGUNIT: /* get ppp/isdn unit number */ | 503 | case PPPIOCGUNIT: /* get ppp/isdn unit number */ |
504 | if ((r = set_arg(argp, &is->unit, sizeof(is->unit) ))) | 504 | if ((r = set_arg(argp, &is->unit, sizeof(is->unit)))) |
505 | return r; | 505 | return r; |
506 | break; | 506 | break; |
507 | case PPPIOCGIFNAME: | 507 | case PPPIOCGIFNAME: |
508 | if(!lp) | 508 | if (!lp) |
509 | return -EINVAL; | 509 | return -EINVAL; |
510 | if ((r = set_arg(argp, lp->netdev->dev->name, | 510 | if ((r = set_arg(argp, lp->netdev->dev->name, |
511 | strlen(lp->netdev->dev->name)))) | 511 | strlen(lp->netdev->dev->name)))) |
512 | return r; | 512 | return r; |
513 | break; | 513 | break; |
514 | case PPPIOCGMPFLAGS: /* get configuration flags */ | 514 | case PPPIOCGMPFLAGS: /* get configuration flags */ |
515 | if ((r = set_arg(argp, &is->mpppcfg, sizeof(is->mpppcfg) ))) | 515 | if ((r = set_arg(argp, &is->mpppcfg, sizeof(is->mpppcfg)))) |
516 | return r; | 516 | return r; |
517 | break; | 517 | break; |
518 | case PPPIOCSMPFLAGS: /* set configuration flags */ | 518 | case PPPIOCSMPFLAGS: /* set configuration flags */ |
519 | if ((r = get_arg(argp, &val, sizeof(val) ))) | 519 | if ((r = get_arg(argp, &val, sizeof(val)))) |
520 | return r; | 520 | return r; |
521 | is->mpppcfg = val; | 521 | is->mpppcfg = val; |
522 | break; | 522 | break; |
523 | case PPPIOCGFLAGS: /* get configuration flags */ | 523 | case PPPIOCGFLAGS: /* get configuration flags */ |
524 | if ((r = set_arg(argp, &is->pppcfg,sizeof(is->pppcfg) ))) | 524 | if ((r = set_arg(argp, &is->pppcfg, sizeof(is->pppcfg)))) |
525 | return r; | 525 | return r; |
526 | break; | 526 | break; |
527 | case PPPIOCSFLAGS: /* set configuration flags */ | 527 | case PPPIOCSFLAGS: /* set configuration flags */ |
528 | if ((r = get_arg(argp, &val, sizeof(val) ))) { | 528 | if ((r = get_arg(argp, &val, sizeof(val)))) { |
529 | return r; | 529 | return r; |
530 | } | 530 | } |
531 | if (val & SC_ENABLE_IP && !(is->pppcfg & SC_ENABLE_IP) && (is->state & IPPP_CONNECT)) { | 531 | if (val & SC_ENABLE_IP && !(is->pppcfg & SC_ENABLE_IP) && (is->state & IPPP_CONNECT)) { |
532 | if (lp) { | ||
533 | /* OK .. we are ready to send buffers */ | ||
534 | is->pppcfg = val; /* isdn_ppp_xmit test for SC_ENABLE_IP !!! */ | ||
535 | netif_wake_queue(lp->netdev->dev); | ||
536 | break; | ||
537 | } | ||
538 | } | ||
539 | is->pppcfg = val; | ||
540 | break; | ||
541 | case PPPIOCGIDLE: /* get idle time information */ | ||
542 | if (lp) { | 532 | if (lp) { |
543 | struct ppp_idle pidle; | 533 | /* OK .. we are ready to send buffers */ |
544 | pidle.xmit_idle = pidle.recv_idle = lp->huptimer; | 534 | is->pppcfg = val; /* isdn_ppp_xmit test for SC_ENABLE_IP !!! */ |
545 | if ((r = set_arg(argp, &pidle,sizeof(struct ppp_idle)))) | 535 | netif_wake_queue(lp->netdev->dev); |
546 | return r; | 536 | break; |
547 | } | 537 | } |
548 | break; | 538 | } |
549 | case PPPIOCSMRU: /* set receive unit size for PPP */ | 539 | is->pppcfg = val; |
550 | if ((r = get_arg(argp, &val, sizeof(val) ))) | 540 | break; |
551 | return r; | 541 | case PPPIOCGIDLE: /* get idle time information */ |
552 | is->mru = val; | 542 | if (lp) { |
553 | break; | 543 | struct ppp_idle pidle; |
554 | case PPPIOCSMPMRU: | 544 | pidle.xmit_idle = pidle.recv_idle = lp->huptimer; |
555 | break; | 545 | if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle)))) |
556 | case PPPIOCSMPMTU: | ||
557 | break; | ||
558 | case PPPIOCSMAXCID: /* set the maximum compression slot id */ | ||
559 | if ((r = get_arg(argp, &val, sizeof(val) ))) | ||
560 | return r; | 546 | return r; |
561 | val++; | 547 | } |
562 | if (is->maxcid != val) { | 548 | break; |
549 | case PPPIOCSMRU: /* set receive unit size for PPP */ | ||
550 | if ((r = get_arg(argp, &val, sizeof(val)))) | ||
551 | return r; | ||
552 | is->mru = val; | ||
553 | break; | ||
554 | case PPPIOCSMPMRU: | ||
555 | break; | ||
556 | case PPPIOCSMPMTU: | ||
557 | break; | ||
558 | case PPPIOCSMAXCID: /* set the maximum compression slot id */ | ||
559 | if ((r = get_arg(argp, &val, sizeof(val)))) | ||
560 | return r; | ||
561 | val++; | ||
562 | if (is->maxcid != val) { | ||
563 | #ifdef CONFIG_ISDN_PPP_VJ | 563 | #ifdef CONFIG_ISDN_PPP_VJ |
564 | struct slcompress *sltmp; | 564 | struct slcompress *sltmp; |
565 | #endif | 565 | #endif |
566 | if (is->debug & 0x1) | 566 | if (is->debug & 0x1) |
567 | printk(KERN_DEBUG "ippp, ioctl: changed MAXCID to %ld\n", val); | 567 | printk(KERN_DEBUG "ippp, ioctl: changed MAXCID to %ld\n", val); |
568 | is->maxcid = val; | 568 | is->maxcid = val; |
569 | #ifdef CONFIG_ISDN_PPP_VJ | 569 | #ifdef CONFIG_ISDN_PPP_VJ |
570 | sltmp = slhc_init(16, val); | 570 | sltmp = slhc_init(16, val); |
571 | if (!sltmp) { | 571 | if (!sltmp) { |
572 | printk(KERN_ERR "ippp, can't realloc slhc struct\n"); | 572 | printk(KERN_ERR "ippp, can't realloc slhc struct\n"); |
573 | return -ENOMEM; | 573 | return -ENOMEM; |
574 | } | ||
575 | if (is->slcomp) | ||
576 | slhc_free(is->slcomp); | ||
577 | is->slcomp = sltmp; | ||
578 | #endif | ||
579 | } | ||
580 | break; | ||
581 | case PPPIOCGDEBUG: | ||
582 | if ((r = set_arg(argp, &is->debug, sizeof(is->debug) ))) | ||
583 | return r; | ||
584 | break; | ||
585 | case PPPIOCSDEBUG: | ||
586 | if ((r = get_arg(argp, &val, sizeof(val) ))) | ||
587 | return r; | ||
588 | is->debug = val; | ||
589 | break; | ||
590 | case PPPIOCGCOMPRESSORS: | ||
591 | { | ||
592 | unsigned long protos[8] = {0,}; | ||
593 | struct isdn_ppp_compressor *ipc = ipc_head; | ||
594 | while(ipc) { | ||
595 | j = ipc->num / (sizeof(long)*8); | ||
596 | i = ipc->num % (sizeof(long)*8); | ||
597 | if(j < 8) | ||
598 | protos[j] |= (0x1<<i); | ||
599 | ipc = ipc->next; | ||
600 | } | ||
601 | if ((r = set_arg(argp,protos,8*sizeof(long) ))) | ||
602 | return r; | ||
603 | } | 574 | } |
604 | break; | 575 | if (is->slcomp) |
605 | case PPPIOCSCOMPRESSOR: | 576 | slhc_free(is->slcomp); |
606 | if ((r = get_arg(argp, &data, sizeof(struct isdn_ppp_comp_data)))) | 577 | is->slcomp = sltmp; |
607 | return r; | 578 | #endif |
608 | return isdn_ppp_set_compressor(is, &data); | 579 | } |
609 | case PPPIOCGCALLINFO: | 580 | break; |
610 | { | 581 | case PPPIOCGDEBUG: |
611 | struct pppcallinfo pci; | 582 | if ((r = set_arg(argp, &is->debug, sizeof(is->debug)))) |
612 | memset((char *) &pci,0,sizeof(struct pppcallinfo)); | 583 | return r; |
613 | if(lp) | 584 | break; |
614 | { | 585 | case PPPIOCSDEBUG: |
615 | strncpy(pci.local_num,lp->msn,63); | 586 | if ((r = get_arg(argp, &val, sizeof(val)))) |
616 | if(lp->dial) { | 587 | return r; |
617 | strncpy(pci.remote_num,lp->dial->num,63); | 588 | is->debug = val; |
618 | } | 589 | break; |
619 | pci.charge_units = lp->charge; | 590 | case PPPIOCGCOMPRESSORS: |
620 | if(lp->outgoing) | 591 | { |
621 | pci.calltype = CALLTYPE_OUTGOING; | 592 | unsigned long protos[8] = {0,}; |
622 | else | 593 | struct isdn_ppp_compressor *ipc = ipc_head; |
623 | pci.calltype = CALLTYPE_INCOMING; | 594 | while (ipc) { |
624 | if(lp->flags & ISDN_NET_CALLBACK) | 595 | j = ipc->num / (sizeof(long) * 8); |
625 | pci.calltype |= CALLTYPE_CALLBACK; | 596 | i = ipc->num % (sizeof(long) * 8); |
626 | } | 597 | if (j < 8) |
627 | return set_arg(argp,&pci,sizeof(struct pppcallinfo)); | 598 | protos[j] |= (0x1 << i); |
599 | ipc = ipc->next; | ||
600 | } | ||
601 | if ((r = set_arg(argp, protos, 8 * sizeof(long)))) | ||
602 | return r; | ||
603 | } | ||
604 | break; | ||
605 | case PPPIOCSCOMPRESSOR: | ||
606 | if ((r = get_arg(argp, &data, sizeof(struct isdn_ppp_comp_data)))) | ||
607 | return r; | ||
608 | return isdn_ppp_set_compressor(is, &data); | ||
609 | case PPPIOCGCALLINFO: | ||
610 | { | ||
611 | struct pppcallinfo pci; | ||
612 | memset((char *)&pci, 0, sizeof(struct pppcallinfo)); | ||
613 | if (lp) | ||
614 | { | ||
615 | strncpy(pci.local_num, lp->msn, 63); | ||
616 | if (lp->dial) { | ||
617 | strncpy(pci.remote_num, lp->dial->num, 63); | ||
628 | } | 618 | } |
619 | pci.charge_units = lp->charge; | ||
620 | if (lp->outgoing) | ||
621 | pci.calltype = CALLTYPE_OUTGOING; | ||
622 | else | ||
623 | pci.calltype = CALLTYPE_INCOMING; | ||
624 | if (lp->flags & ISDN_NET_CALLBACK) | ||
625 | pci.calltype |= CALLTYPE_CALLBACK; | ||
626 | } | ||
627 | return set_arg(argp, &pci, sizeof(struct pppcallinfo)); | ||
628 | } | ||
629 | #ifdef CONFIG_IPPP_FILTER | 629 | #ifdef CONFIG_IPPP_FILTER |
630 | case PPPIOCSPASS: | 630 | case PPPIOCSPASS: |
631 | { | 631 | { |
632 | struct sock_filter *code; | 632 | struct sock_filter *code; |
633 | int len = get_filter(argp, &code); | 633 | int len = get_filter(argp, &code); |
634 | if (len < 0) | 634 | if (len < 0) |
635 | return len; | 635 | return len; |
636 | kfree(is->pass_filter); | 636 | kfree(is->pass_filter); |
637 | is->pass_filter = code; | 637 | is->pass_filter = code; |
638 | is->pass_len = len; | 638 | is->pass_len = len; |
639 | break; | 639 | break; |
640 | } | 640 | } |
641 | case PPPIOCSACTIVE: | 641 | case PPPIOCSACTIVE: |
642 | { | 642 | { |
643 | struct sock_filter *code; | 643 | struct sock_filter *code; |
644 | int len = get_filter(argp, &code); | 644 | int len = get_filter(argp, &code); |
645 | if (len < 0) | 645 | if (len < 0) |
646 | return len; | 646 | return len; |
647 | kfree(is->active_filter); | 647 | kfree(is->active_filter); |
648 | is->active_filter = code; | 648 | is->active_filter = code; |
649 | is->active_len = len; | 649 | is->active_len = len; |
650 | break; | 650 | break; |
651 | } | 651 | } |
652 | #endif /* CONFIG_IPPP_FILTER */ | 652 | #endif /* CONFIG_IPPP_FILTER */ |
653 | default: | 653 | default: |
654 | break; | 654 | break; |
655 | } | 655 | } |
656 | return 0; | 656 | return 0; |
657 | } | 657 | } |
658 | 658 | ||
659 | unsigned int | 659 | unsigned int |
660 | isdn_ppp_poll(struct file *file, poll_table * wait) | 660 | isdn_ppp_poll(struct file *file, poll_table *wait) |
661 | { | 661 | { |
662 | u_int mask; | 662 | u_int mask; |
663 | struct ippp_buf_queue *bf, *bl; | 663 | struct ippp_buf_queue *bf, *bl; |
@@ -668,13 +668,13 @@ isdn_ppp_poll(struct file *file, poll_table * wait) | |||
668 | 668 | ||
669 | if (is->debug & 0x2) | 669 | if (is->debug & 0x2) |
670 | printk(KERN_DEBUG "isdn_ppp_poll: minor: %d\n", | 670 | printk(KERN_DEBUG "isdn_ppp_poll: minor: %d\n", |
671 | iminor(file->f_path.dentry->d_inode)); | 671 | iminor(file->f_path.dentry->d_inode)); |
672 | 672 | ||
673 | /* just registers wait_queue hook. This doesn't really wait. */ | 673 | /* just registers wait_queue hook. This doesn't really wait. */ |
674 | poll_wait(file, &is->wq, wait); | 674 | poll_wait(file, &is->wq, wait); |
675 | 675 | ||
676 | if (!(is->state & IPPP_OPEN)) { | 676 | if (!(is->state & IPPP_OPEN)) { |
677 | if(is->state == IPPP_CLOSEWAIT) | 677 | if (is->state == IPPP_CLOSEWAIT) |
678 | return POLLHUP; | 678 | return POLLHUP; |
679 | printk(KERN_DEBUG "isdn_ppp: device not open\n"); | 679 | printk(KERN_DEBUG "isdn_ppp: device not open\n"); |
680 | return POLLERR; | 680 | return POLLERR; |
@@ -827,7 +827,7 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) | |||
827 | return 0; | 827 | return 0; |
828 | 828 | ||
829 | if ((dev->drv[lp->isdn_device]->flags & DRV_FLAG_RUNNING) && | 829 | if ((dev->drv[lp->isdn_device]->flags & DRV_FLAG_RUNNING) && |
830 | lp->dialstate == 0 && | 830 | lp->dialstate == 0 && |
831 | (lp->flags & ISDN_NET_CONNECTED)) { | 831 | (lp->flags & ISDN_NET_CONNECTED)) { |
832 | unsigned short hl; | 832 | unsigned short hl; |
833 | struct sk_buff *skb; | 833 | struct sk_buff *skb; |
@@ -837,7 +837,7 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) | |||
837 | * 16 bytes, now we are looking what the driver want | 837 | * 16 bytes, now we are looking what the driver want |
838 | */ | 838 | */ |
839 | hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen; | 839 | hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen; |
840 | skb = alloc_skb(hl+count, GFP_ATOMIC); | 840 | skb = alloc_skb(hl + count, GFP_ATOMIC); |
841 | if (!skb) { | 841 | if (!skb) { |
842 | printk(KERN_WARNING "isdn_ppp_write: out of memory!\n"); | 842 | printk(KERN_WARNING "isdn_ppp_write: out of memory!\n"); |
843 | return count; | 843 | return count; |
@@ -850,10 +850,10 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) | |||
850 | } | 850 | } |
851 | if (is->debug & 0x40) { | 851 | if (is->debug & 0x40) { |
852 | printk(KERN_DEBUG "ppp xmit: len %d\n", (int) skb->len); | 852 | printk(KERN_DEBUG "ppp xmit: len %d\n", (int) skb->len); |
853 | isdn_ppp_frame_log("xmit", skb->data, skb->len, 32,is->unit,lp->ppp_slot); | 853 | isdn_ppp_frame_log("xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot); |
854 | } | 854 | } |
855 | 855 | ||
856 | isdn_ppp_send_ccp(lp->netdev,lp,skb); /* keeps CCP/compression states in sync */ | 856 | isdn_ppp_send_ccp(lp->netdev, lp, skb); /* keeps CCP/compression states in sync */ |
857 | 857 | ||
858 | isdn_net_write_super(lp, skb); | 858 | isdn_net_write_super(lp, skb); |
859 | } | 859 | } |
@@ -869,10 +869,10 @@ int | |||
869 | isdn_ppp_init(void) | 869 | isdn_ppp_init(void) |
870 | { | 870 | { |
871 | int i, | 871 | int i, |
872 | j; | 872 | j; |
873 | 873 | ||
874 | #ifdef CONFIG_ISDN_MPP | 874 | #ifdef CONFIG_ISDN_MPP |
875 | if( isdn_ppp_mp_bundle_array_init() < 0 ) | 875 | if (isdn_ppp_mp_bundle_array_init() < 0) |
876 | return -ENOMEM; | 876 | return -ENOMEM; |
877 | #endif /* CONFIG_ISDN_MPP */ | 877 | #endif /* CONFIG_ISDN_MPP */ |
878 | 878 | ||
@@ -891,7 +891,7 @@ isdn_ppp_init(void) | |||
891 | for (j = 0; j < NUM_RCV_BUFFS; j++) { | 891 | for (j = 0; j < NUM_RCV_BUFFS; j++) { |
892 | ippp_table[i]->rq[j].buf = NULL; | 892 | ippp_table[i]->rq[j].buf = NULL; |
893 | ippp_table[i]->rq[j].last = ippp_table[i]->rq + | 893 | ippp_table[i]->rq[j].last = ippp_table[i]->rq + |
894 | (NUM_RCV_BUFFS + j - 1) % NUM_RCV_BUFFS; | 894 | (NUM_RCV_BUFFS + j - 1) % NUM_RCV_BUFFS; |
895 | ippp_table[i]->rq[j].next = ippp_table[i]->rq + (j + 1) % NUM_RCV_BUFFS; | 895 | ippp_table[i]->rq[j].next = ippp_table[i]->rq + (j + 1) % NUM_RCV_BUFFS; |
896 | } | 896 | } |
897 | } | 897 | } |
@@ -916,7 +916,7 @@ isdn_ppp_cleanup(void) | |||
916 | * check for address/control field and skip if allowed | 916 | * check for address/control field and skip if allowed |
917 | * retval != 0 -> discard packet silently | 917 | * retval != 0 -> discard packet silently |
918 | */ | 918 | */ |
919 | static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) | 919 | static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) |
920 | { | 920 | { |
921 | if (skb->len < 1) | 921 | if (skb->len < 1) |
922 | return -1; | 922 | return -1; |
@@ -930,7 +930,7 @@ static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) | |||
930 | 930 | ||
931 | // skip address/control (AC) field | 931 | // skip address/control (AC) field |
932 | skb_pull(skb, 2); | 932 | skb_pull(skb, 2); |
933 | } else { | 933 | } else { |
934 | if (is->pppcfg & SC_REJ_COMP_AC) | 934 | if (is->pppcfg & SC_REJ_COMP_AC) |
935 | // if AC compression was not negotiated, but used, discard packet | 935 | // if AC compression was not negotiated, but used, discard packet |
936 | return -1; | 936 | return -1; |
@@ -942,10 +942,10 @@ static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) | |||
942 | * get the PPP protocol header and pull skb | 942 | * get the PPP protocol header and pull skb |
943 | * retval < 0 -> discard packet silently | 943 | * retval < 0 -> discard packet silently |
944 | */ | 944 | */ |
945 | static int isdn_ppp_strip_proto(struct sk_buff *skb) | 945 | static int isdn_ppp_strip_proto(struct sk_buff *skb) |
946 | { | 946 | { |
947 | int proto; | 947 | int proto; |
948 | 948 | ||
949 | if (skb->len < 1) | 949 | if (skb->len < 1) |
950 | return -1; | 950 | return -1; |
951 | 951 | ||
@@ -966,7 +966,7 @@ static int isdn_ppp_strip_proto(struct sk_buff *skb) | |||
966 | /* | 966 | /* |
967 | * handler for incoming packets on a syncPPP interface | 967 | * handler for incoming packets on a syncPPP interface |
968 | */ | 968 | */ |
969 | void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff *skb) | 969 | void isdn_ppp_receive(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb) |
970 | { | 970 | { |
971 | struct ippp_struct *is; | 971 | struct ippp_struct *is; |
972 | int slot; | 972 | int slot; |
@@ -977,7 +977,7 @@ void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buf | |||
977 | slot = lp->ppp_slot; | 977 | slot = lp->ppp_slot; |
978 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 978 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
979 | printk(KERN_ERR "isdn_ppp_receive: lp->ppp_slot(%d)\n", | 979 | printk(KERN_ERR "isdn_ppp_receive: lp->ppp_slot(%d)\n", |
980 | lp->ppp_slot); | 980 | lp->ppp_slot); |
981 | kfree_skb(skb); | 981 | kfree_skb(skb); |
982 | return; | 982 | return; |
983 | } | 983 | } |
@@ -985,35 +985,35 @@ void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buf | |||
985 | 985 | ||
986 | if (is->debug & 0x4) { | 986 | if (is->debug & 0x4) { |
987 | printk(KERN_DEBUG "ippp_receive: is:%08lx lp:%08lx slot:%d unit:%d len:%d\n", | 987 | printk(KERN_DEBUG "ippp_receive: is:%08lx lp:%08lx slot:%d unit:%d len:%d\n", |
988 | (long)is,(long)lp,lp->ppp_slot,is->unit,(int) skb->len); | 988 | (long)is, (long)lp, lp->ppp_slot, is->unit, (int)skb->len); |
989 | isdn_ppp_frame_log("receive", skb->data, skb->len, 32,is->unit,lp->ppp_slot); | 989 | isdn_ppp_frame_log("receive", skb->data, skb->len, 32, is->unit, lp->ppp_slot); |
990 | } | 990 | } |
991 | 991 | ||
992 | if (isdn_ppp_skip_ac(is, skb) < 0) { | 992 | if (isdn_ppp_skip_ac(is, skb) < 0) { |
993 | kfree_skb(skb); | 993 | kfree_skb(skb); |
994 | return; | 994 | return; |
995 | } | 995 | } |
996 | proto = isdn_ppp_strip_proto(skb); | 996 | proto = isdn_ppp_strip_proto(skb); |
997 | if (proto < 0) { | 997 | if (proto < 0) { |
998 | kfree_skb(skb); | 998 | kfree_skb(skb); |
999 | return; | 999 | return; |
1000 | } | 1000 | } |
1001 | 1001 | ||
1002 | #ifdef CONFIG_ISDN_MPP | 1002 | #ifdef CONFIG_ISDN_MPP |
1003 | if (is->compflags & SC_LINK_DECOMP_ON) { | 1003 | if (is->compflags & SC_LINK_DECOMP_ON) { |
1004 | skb = isdn_ppp_decompress(skb, is, NULL, &proto); | 1004 | skb = isdn_ppp_decompress(skb, is, NULL, &proto); |
1005 | if (!skb) // decompression error | 1005 | if (!skb) // decompression error |
1006 | return; | 1006 | return; |
1007 | } | 1007 | } |
1008 | 1008 | ||
1009 | if (!(is->mpppcfg & SC_REJ_MP_PROT)) { // we agreed to receive MPPP | 1009 | if (!(is->mpppcfg & SC_REJ_MP_PROT)) { // we agreed to receive MPPP |
1010 | if (proto == PPP_MP) { | 1010 | if (proto == PPP_MP) { |
1011 | isdn_ppp_mp_receive(net_dev, lp, skb); | 1011 | isdn_ppp_mp_receive(net_dev, lp, skb); |
1012 | return; | 1012 | return; |
1013 | } | 1013 | } |
1014 | } | 1014 | } |
1015 | #endif | 1015 | #endif |
1016 | isdn_ppp_push_higher(net_dev, lp, skb, proto); | 1016 | isdn_ppp_push_higher(net_dev, lp, skb, proto); |
1017 | } | 1017 | } |
1018 | 1018 | ||
1019 | /* | 1019 | /* |
@@ -1022,116 +1022,116 @@ void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buf | |||
1022 | * note: net_dev has to be master net_dev | 1022 | * note: net_dev has to be master net_dev |
1023 | */ | 1023 | */ |
1024 | static void | 1024 | static void |
1025 | isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff *skb, int proto) | 1025 | isdn_ppp_push_higher(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb, int proto) |
1026 | { | 1026 | { |
1027 | struct net_device *dev = net_dev->dev; | 1027 | struct net_device *dev = net_dev->dev; |
1028 | struct ippp_struct *is, *mis; | 1028 | struct ippp_struct *is, *mis; |
1029 | isdn_net_local *mlp = NULL; | 1029 | isdn_net_local *mlp = NULL; |
1030 | int slot; | 1030 | int slot; |
1031 | 1031 | ||
1032 | slot = lp->ppp_slot; | 1032 | slot = lp->ppp_slot; |
1033 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 1033 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
1034 | printk(KERN_ERR "isdn_ppp_push_higher: lp->ppp_slot(%d)\n", | 1034 | printk(KERN_ERR "isdn_ppp_push_higher: lp->ppp_slot(%d)\n", |
1035 | lp->ppp_slot); | 1035 | lp->ppp_slot); |
1036 | goto drop_packet; | 1036 | goto drop_packet; |
1037 | } | 1037 | } |
1038 | is = ippp_table[slot]; | 1038 | is = ippp_table[slot]; |
1039 | 1039 | ||
1040 | if (lp->master) { // FIXME? | 1040 | if (lp->master) { // FIXME? |
1041 | mlp = ISDN_MASTER_PRIV(lp); | 1041 | mlp = ISDN_MASTER_PRIV(lp); |
1042 | slot = mlp->ppp_slot; | 1042 | slot = mlp->ppp_slot; |
1043 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 1043 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
1044 | printk(KERN_ERR "isdn_ppp_push_higher: master->ppp_slot(%d)\n", | 1044 | printk(KERN_ERR "isdn_ppp_push_higher: master->ppp_slot(%d)\n", |
1045 | lp->ppp_slot); | 1045 | lp->ppp_slot); |
1046 | goto drop_packet; | 1046 | goto drop_packet; |
1047 | } | 1047 | } |
1048 | } | 1048 | } |
1049 | mis = ippp_table[slot]; | 1049 | mis = ippp_table[slot]; |
1050 | 1050 | ||
1051 | if (is->debug & 0x10) { | 1051 | if (is->debug & 0x10) { |
1052 | printk(KERN_DEBUG "push, skb %d %04x\n", (int) skb->len, proto); | 1052 | printk(KERN_DEBUG "push, skb %d %04x\n", (int) skb->len, proto); |
1053 | isdn_ppp_frame_log("rpush", skb->data, skb->len, 32,is->unit,lp->ppp_slot); | 1053 | isdn_ppp_frame_log("rpush", skb->data, skb->len, 32, is->unit, lp->ppp_slot); |
1054 | } | 1054 | } |
1055 | if (mis->compflags & SC_DECOMP_ON) { | 1055 | if (mis->compflags & SC_DECOMP_ON) { |
1056 | skb = isdn_ppp_decompress(skb, is, mis, &proto); | 1056 | skb = isdn_ppp_decompress(skb, is, mis, &proto); |
1057 | if (!skb) // decompression error | 1057 | if (!skb) // decompression error |
1058 | return; | 1058 | return; |
1059 | } | 1059 | } |
1060 | switch (proto) { | 1060 | switch (proto) { |
1061 | case PPP_IPX: /* untested */ | 1061 | case PPP_IPX: /* untested */ |
1062 | if (is->debug & 0x20) | 1062 | if (is->debug & 0x20) |
1063 | printk(KERN_DEBUG "isdn_ppp: IPX\n"); | 1063 | printk(KERN_DEBUG "isdn_ppp: IPX\n"); |
1064 | skb->protocol = htons(ETH_P_IPX); | 1064 | skb->protocol = htons(ETH_P_IPX); |
1065 | break; | 1065 | break; |
1066 | case PPP_IP: | 1066 | case PPP_IP: |
1067 | if (is->debug & 0x20) | 1067 | if (is->debug & 0x20) |
1068 | printk(KERN_DEBUG "isdn_ppp: IP\n"); | 1068 | printk(KERN_DEBUG "isdn_ppp: IP\n"); |
1069 | skb->protocol = htons(ETH_P_IP); | 1069 | skb->protocol = htons(ETH_P_IP); |
1070 | break; | 1070 | break; |
1071 | case PPP_COMP: | 1071 | case PPP_COMP: |
1072 | case PPP_COMPFRAG: | 1072 | case PPP_COMPFRAG: |
1073 | printk(KERN_INFO "isdn_ppp: unexpected compressed frame dropped\n"); | 1073 | printk(KERN_INFO "isdn_ppp: unexpected compressed frame dropped\n"); |
1074 | goto drop_packet; | 1074 | goto drop_packet; |
1075 | #ifdef CONFIG_ISDN_PPP_VJ | 1075 | #ifdef CONFIG_ISDN_PPP_VJ |
1076 | case PPP_VJC_UNCOMP: | 1076 | case PPP_VJC_UNCOMP: |
1077 | if (is->debug & 0x20) | 1077 | if (is->debug & 0x20) |
1078 | printk(KERN_DEBUG "isdn_ppp: VJC_UNCOMP\n"); | 1078 | printk(KERN_DEBUG "isdn_ppp: VJC_UNCOMP\n"); |
1079 | if (net_dev->local->ppp_slot < 0) { | ||
1080 | printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", | ||
1081 | __func__, net_dev->local->ppp_slot); | ||
1082 | goto drop_packet; | ||
1083 | } | ||
1084 | if (slhc_remember(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb->len) <= 0) { | ||
1085 | printk(KERN_WARNING "isdn_ppp: received illegal VJC_UNCOMP frame!\n"); | ||
1086 | goto drop_packet; | ||
1087 | } | ||
1088 | skb->protocol = htons(ETH_P_IP); | ||
1089 | break; | ||
1090 | case PPP_VJC_COMP: | ||
1091 | if (is->debug & 0x20) | ||
1092 | printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); | ||
1093 | { | ||
1094 | struct sk_buff *skb_old = skb; | ||
1095 | int pkt_len; | ||
1096 | skb = dev_alloc_skb(skb_old->len + 128); | ||
1097 | |||
1098 | if (!skb) { | ||
1099 | printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); | ||
1100 | skb = skb_old; | ||
1101 | goto drop_packet; | ||
1102 | } | ||
1103 | skb_put(skb, skb_old->len + 128); | ||
1104 | skb_copy_from_linear_data(skb_old, skb->data, | ||
1105 | skb_old->len); | ||
1079 | if (net_dev->local->ppp_slot < 0) { | 1106 | if (net_dev->local->ppp_slot < 0) { |
1080 | printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", | 1107 | printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", |
1081 | __func__, net_dev->local->ppp_slot); | 1108 | __func__, net_dev->local->ppp_slot); |
1082 | goto drop_packet; | 1109 | goto drop_packet; |
1083 | } | 1110 | } |
1084 | if (slhc_remember(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb->len) <= 0) { | 1111 | pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, |
1085 | printk(KERN_WARNING "isdn_ppp: received illegal VJC_UNCOMP frame!\n"); | 1112 | skb->data, skb_old->len); |
1113 | kfree_skb(skb_old); | ||
1114 | if (pkt_len < 0) | ||
1086 | goto drop_packet; | 1115 | goto drop_packet; |
1087 | } | 1116 | |
1117 | skb_trim(skb, pkt_len); | ||
1088 | skb->protocol = htons(ETH_P_IP); | 1118 | skb->protocol = htons(ETH_P_IP); |
1089 | break; | 1119 | } |
1090 | case PPP_VJC_COMP: | 1120 | break; |
1091 | if (is->debug & 0x20) | ||
1092 | printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); | ||
1093 | { | ||
1094 | struct sk_buff *skb_old = skb; | ||
1095 | int pkt_len; | ||
1096 | skb = dev_alloc_skb(skb_old->len + 128); | ||
1097 | |||
1098 | if (!skb) { | ||
1099 | printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); | ||
1100 | skb = skb_old; | ||
1101 | goto drop_packet; | ||
1102 | } | ||
1103 | skb_put(skb, skb_old->len + 128); | ||
1104 | skb_copy_from_linear_data(skb_old, skb->data, | ||
1105 | skb_old->len); | ||
1106 | if (net_dev->local->ppp_slot < 0) { | ||
1107 | printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", | ||
1108 | __func__, net_dev->local->ppp_slot); | ||
1109 | goto drop_packet; | ||
1110 | } | ||
1111 | pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, | ||
1112 | skb->data, skb_old->len); | ||
1113 | kfree_skb(skb_old); | ||
1114 | if (pkt_len < 0) | ||
1115 | goto drop_packet; | ||
1116 | |||
1117 | skb_trim(skb, pkt_len); | ||
1118 | skb->protocol = htons(ETH_P_IP); | ||
1119 | } | ||
1120 | break; | ||
1121 | #endif | 1121 | #endif |
1122 | case PPP_CCP: | 1122 | case PPP_CCP: |
1123 | case PPP_CCPFRAG: | 1123 | case PPP_CCPFRAG: |
1124 | isdn_ppp_receive_ccp(net_dev,lp,skb,proto); | 1124 | isdn_ppp_receive_ccp(net_dev, lp, skb, proto); |
1125 | /* Dont pop up ResetReq/Ack stuff to the daemon any | 1125 | /* Dont pop up ResetReq/Ack stuff to the daemon any |
1126 | longer - the job is done already */ | 1126 | longer - the job is done already */ |
1127 | if(skb->data[0] == CCP_RESETREQ || | 1127 | if (skb->data[0] == CCP_RESETREQ || |
1128 | skb->data[0] == CCP_RESETACK) | 1128 | skb->data[0] == CCP_RESETACK) |
1129 | break; | 1129 | break; |
1130 | /* fall through */ | 1130 | /* fall through */ |
1131 | default: | 1131 | default: |
1132 | isdn_ppp_fill_rq(skb->data, skb->len, proto, lp->ppp_slot); /* push data to pppd device */ | 1132 | isdn_ppp_fill_rq(skb->data, skb->len, proto, lp->ppp_slot); /* push data to pppd device */ |
1133 | kfree_skb(skb); | 1133 | kfree_skb(skb); |
1134 | return; | 1134 | return; |
1135 | } | 1135 | } |
1136 | 1136 | ||
1137 | #ifdef CONFIG_IPPP_FILTER | 1137 | #ifdef CONFIG_IPPP_FILTER |
@@ -1173,7 +1173,7 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff | |||
1173 | /* net_dev->local->stats.rx_packets++; done in isdn_net.c */ | 1173 | /* net_dev->local->stats.rx_packets++; done in isdn_net.c */ |
1174 | return; | 1174 | return; |
1175 | 1175 | ||
1176 | drop_packet: | 1176 | drop_packet: |
1177 | net_dev->local->stats.rx_dropped++; | 1177 | net_dev->local->stats.rx_dropped++; |
1178 | kfree_skb(skb); | 1178 | kfree_skb(skb); |
1179 | } | 1179 | } |
@@ -1183,11 +1183,11 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff | |||
1183 | * checks whether we have enough space at the beginning of the skb | 1183 | * checks whether we have enough space at the beginning of the skb |
1184 | * and allocs a new SKB if necessary | 1184 | * and allocs a new SKB if necessary |
1185 | */ | 1185 | */ |
1186 | static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len) | 1186 | static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p, int len) |
1187 | { | 1187 | { |
1188 | struct sk_buff *skb = *skb_p; | 1188 | struct sk_buff *skb = *skb_p; |
1189 | 1189 | ||
1190 | if(skb_headroom(skb) < len) { | 1190 | if (skb_headroom(skb) < len) { |
1191 | struct sk_buff *nskb = skb_realloc_headroom(skb, len); | 1191 | struct sk_buff *nskb = skb_realloc_headroom(skb, len); |
1192 | 1192 | ||
1193 | if (!nskb) { | 1193 | if (!nskb) { |
@@ -1195,12 +1195,12 @@ static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len) | |||
1195 | dev_kfree_skb(skb); | 1195 | dev_kfree_skb(skb); |
1196 | return NULL; | 1196 | return NULL; |
1197 | } | 1197 | } |
1198 | printk(KERN_DEBUG "isdn_ppp_skb_push:under %d %d\n",skb_headroom(skb),len); | 1198 | printk(KERN_DEBUG "isdn_ppp_skb_push:under %d %d\n", skb_headroom(skb), len); |
1199 | dev_kfree_skb(skb); | 1199 | dev_kfree_skb(skb); |
1200 | *skb_p = nskb; | 1200 | *skb_p = nskb; |
1201 | return skb_push(nskb, len); | 1201 | return skb_push(nskb, len); |
1202 | } | 1202 | } |
1203 | return skb_push(skb,len); | 1203 | return skb_push(skb, len); |
1204 | } | 1204 | } |
1205 | 1205 | ||
1206 | /* | 1206 | /* |
@@ -1214,10 +1214,10 @@ static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len) | |||
1214 | int | 1214 | int |
1215 | isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | 1215 | isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) |
1216 | { | 1216 | { |
1217 | isdn_net_local *lp,*mlp; | 1217 | isdn_net_local *lp, *mlp; |
1218 | isdn_net_dev *nd; | 1218 | isdn_net_dev *nd; |
1219 | unsigned int proto = PPP_IP; /* 0x21 */ | 1219 | unsigned int proto = PPP_IP; /* 0x21 */ |
1220 | struct ippp_struct *ipt,*ipts; | 1220 | struct ippp_struct *ipt, *ipts; |
1221 | int slot, retval = NETDEV_TX_OK; | 1221 | int slot, retval = NETDEV_TX_OK; |
1222 | 1222 | ||
1223 | mlp = netdev_priv(netdev); | 1223 | mlp = netdev_priv(netdev); |
@@ -1226,7 +1226,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1226 | slot = mlp->ppp_slot; | 1226 | slot = mlp->ppp_slot; |
1227 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 1227 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
1228 | printk(KERN_ERR "isdn_ppp_xmit: lp->ppp_slot(%d)\n", | 1228 | printk(KERN_ERR "isdn_ppp_xmit: lp->ppp_slot(%d)\n", |
1229 | mlp->ppp_slot); | 1229 | mlp->ppp_slot); |
1230 | kfree_skb(skb); | 1230 | kfree_skb(skb); |
1231 | goto out; | 1231 | goto out; |
1232 | } | 1232 | } |
@@ -1240,17 +1240,17 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1240 | } | 1240 | } |
1241 | 1241 | ||
1242 | switch (ntohs(skb->protocol)) { | 1242 | switch (ntohs(skb->protocol)) { |
1243 | case ETH_P_IP: | 1243 | case ETH_P_IP: |
1244 | proto = PPP_IP; | 1244 | proto = PPP_IP; |
1245 | break; | 1245 | break; |
1246 | case ETH_P_IPX: | 1246 | case ETH_P_IPX: |
1247 | proto = PPP_IPX; /* untested */ | 1247 | proto = PPP_IPX; /* untested */ |
1248 | break; | 1248 | break; |
1249 | default: | 1249 | default: |
1250 | printk(KERN_ERR "isdn_ppp: skipped unsupported protocol: %#x.\n", | 1250 | printk(KERN_ERR "isdn_ppp: skipped unsupported protocol: %#x.\n", |
1251 | skb->protocol); | 1251 | skb->protocol); |
1252 | dev_kfree_skb(skb); | 1252 | dev_kfree_skb(skb); |
1253 | goto out; | 1253 | goto out; |
1254 | } | 1254 | } |
1255 | 1255 | ||
1256 | lp = isdn_net_get_locked_lp(nd); | 1256 | lp = isdn_net_get_locked_lp(nd); |
@@ -1264,7 +1264,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1264 | slot = lp->ppp_slot; | 1264 | slot = lp->ppp_slot; |
1265 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 1265 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
1266 | printk(KERN_ERR "isdn_ppp_xmit: lp->ppp_slot(%d)\n", | 1266 | printk(KERN_ERR "isdn_ppp_xmit: lp->ppp_slot(%d)\n", |
1267 | lp->ppp_slot); | 1267 | lp->ppp_slot); |
1268 | kfree_skb(skb); | 1268 | kfree_skb(skb); |
1269 | goto unlock; | 1269 | goto unlock; |
1270 | } | 1270 | } |
@@ -1277,7 +1277,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1277 | /* Pull off the fake header we stuck on earlier to keep | 1277 | /* Pull off the fake header we stuck on earlier to keep |
1278 | * the fragmentation code happy. | 1278 | * the fragmentation code happy. |
1279 | */ | 1279 | */ |
1280 | skb_pull(skb,IPPP_MAX_HEADER); | 1280 | skb_pull(skb, IPPP_MAX_HEADER); |
1281 | 1281 | ||
1282 | #ifdef CONFIG_IPPP_FILTER | 1282 | #ifdef CONFIG_IPPP_FILTER |
1283 | /* check if we should pass this packet | 1283 | /* check if we should pass this packet |
@@ -1312,26 +1312,26 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1312 | 1312 | ||
1313 | if (ipt->debug & 0x4) | 1313 | if (ipt->debug & 0x4) |
1314 | printk(KERN_DEBUG "xmit skb, len %d\n", (int) skb->len); | 1314 | printk(KERN_DEBUG "xmit skb, len %d\n", (int) skb->len); |
1315 | if (ipts->debug & 0x40) | 1315 | if (ipts->debug & 0x40) |
1316 | isdn_ppp_frame_log("xmit0", skb->data, skb->len, 32,ipts->unit,lp->ppp_slot); | 1316 | isdn_ppp_frame_log("xmit0", skb->data, skb->len, 32, ipts->unit, lp->ppp_slot); |
1317 | 1317 | ||
1318 | #ifdef CONFIG_ISDN_PPP_VJ | 1318 | #ifdef CONFIG_ISDN_PPP_VJ |
1319 | if (proto == PPP_IP && ipts->pppcfg & SC_COMP_TCP) { /* ipts here? probably yes, but check this again */ | 1319 | if (proto == PPP_IP && ipts->pppcfg & SC_COMP_TCP) { /* ipts here? probably yes, but check this again */ |
1320 | struct sk_buff *new_skb; | 1320 | struct sk_buff *new_skb; |
1321 | unsigned short hl; | 1321 | unsigned short hl; |
1322 | /* | 1322 | /* |
1323 | * we need to reserve enough space in front of | 1323 | * we need to reserve enough space in front of |
1324 | * sk_buff. old call to dev_alloc_skb only reserved | 1324 | * sk_buff. old call to dev_alloc_skb only reserved |
1325 | * 16 bytes, now we are looking what the driver want. | 1325 | * 16 bytes, now we are looking what the driver want. |
1326 | */ | 1326 | */ |
1327 | hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen + IPPP_MAX_HEADER; | 1327 | hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen + IPPP_MAX_HEADER; |
1328 | /* | 1328 | /* |
1329 | * Note: hl might still be insufficient because the method | 1329 | * Note: hl might still be insufficient because the method |
1330 | * above does not account for a possibible MPPP slave channel | 1330 | * above does not account for a possibible MPPP slave channel |
1331 | * which had larger HL header space requirements than the | 1331 | * which had larger HL header space requirements than the |
1332 | * master. | 1332 | * master. |
1333 | */ | 1333 | */ |
1334 | new_skb = alloc_skb(hl+skb->len, GFP_ATOMIC); | 1334 | new_skb = alloc_skb(hl + skb->len, GFP_ATOMIC); |
1335 | if (new_skb) { | 1335 | if (new_skb) { |
1336 | u_char *buf; | 1336 | u_char *buf; |
1337 | int pktlen; | 1337 | int pktlen; |
@@ -1342,9 +1342,9 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1342 | buf = skb->data; | 1342 | buf = skb->data; |
1343 | 1343 | ||
1344 | pktlen = slhc_compress(ipts->slcomp, skb->data, skb->len, new_skb->data, | 1344 | pktlen = slhc_compress(ipts->slcomp, skb->data, skb->len, new_skb->data, |
1345 | &buf, !(ipts->pppcfg & SC_NO_TCP_CCID)); | 1345 | &buf, !(ipts->pppcfg & SC_NO_TCP_CCID)); |
1346 | 1346 | ||
1347 | if (buf != skb->data) { | 1347 | if (buf != skb->data) { |
1348 | if (new_skb->data != buf) | 1348 | if (new_skb->data != buf) |
1349 | printk(KERN_ERR "isdn_ppp: FATAL error after slhc_compress!!\n"); | 1349 | printk(KERN_ERR "isdn_ppp: FATAL error after slhc_compress!!\n"); |
1350 | dev_kfree_skb(skb); | 1350 | dev_kfree_skb(skb); |
@@ -1369,11 +1369,11 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1369 | /* | 1369 | /* |
1370 | * normal (single link) or bundle compression | 1370 | * normal (single link) or bundle compression |
1371 | */ | 1371 | */ |
1372 | if(ipts->compflags & SC_COMP_ON) { | 1372 | if (ipts->compflags & SC_COMP_ON) { |
1373 | /* We send compressed only if both down- und upstream | 1373 | /* We send compressed only if both down- und upstream |
1374 | compression is negotiated, that means, CCP is up */ | 1374 | compression is negotiated, that means, CCP is up */ |
1375 | if(ipts->compflags & SC_DECOMP_ON) { | 1375 | if (ipts->compflags & SC_DECOMP_ON) { |
1376 | skb = isdn_ppp_compress(skb,&proto,ipt,ipts,0); | 1376 | skb = isdn_ppp_compress(skb, &proto, ipt, ipts, 0); |
1377 | } else { | 1377 | } else { |
1378 | printk(KERN_DEBUG "isdn_ppp: CCP not yet up - sending as-is\n"); | 1378 | printk(KERN_DEBUG "isdn_ppp: CCP not yet up - sending as-is\n"); |
1379 | } | 1379 | } |
@@ -1389,7 +1389,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1389 | ipts->mp_seqno++; | 1389 | ipts->mp_seqno++; |
1390 | if (ipt->mpppcfg & SC_OUT_SHORT_SEQ) { | 1390 | if (ipt->mpppcfg & SC_OUT_SHORT_SEQ) { |
1391 | unsigned char *data = isdn_ppp_skb_push(&skb, 3); | 1391 | unsigned char *data = isdn_ppp_skb_push(&skb, 3); |
1392 | if(!data) | 1392 | if (!data) |
1393 | goto unlock; | 1393 | goto unlock; |
1394 | mp_seqno &= 0xfff; | 1394 | mp_seqno &= 0xfff; |
1395 | data[0] = MP_BEGIN_FRAG | MP_END_FRAG | ((mp_seqno >> 8) & 0xf); /* (B)egin & (E)ndbit .. */ | 1395 | data[0] = MP_BEGIN_FRAG | MP_END_FRAG | ((mp_seqno >> 8) & 0xf); /* (B)egin & (E)ndbit .. */ |
@@ -1397,7 +1397,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1397 | data[2] = proto; /* PID compression */ | 1397 | data[2] = proto; /* PID compression */ |
1398 | } else { | 1398 | } else { |
1399 | unsigned char *data = isdn_ppp_skb_push(&skb, 5); | 1399 | unsigned char *data = isdn_ppp_skb_push(&skb, 5); |
1400 | if(!data) | 1400 | if (!data) |
1401 | goto unlock; | 1401 | goto unlock; |
1402 | data[0] = MP_BEGIN_FRAG | MP_END_FRAG; /* (B)egin & (E)ndbit .. */ | 1402 | data[0] = MP_BEGIN_FRAG | MP_END_FRAG; /* (B)egin & (E)ndbit .. */ |
1403 | data[1] = (mp_seqno >> 16) & 0xff; /* sequence number: 24bit */ | 1403 | data[1] = (mp_seqno >> 16) & 0xff; /* sequence number: 24bit */ |
@@ -1412,25 +1412,25 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1412 | /* | 1412 | /* |
1413 | * 'link in bundle' compression ... | 1413 | * 'link in bundle' compression ... |
1414 | */ | 1414 | */ |
1415 | if(ipt->compflags & SC_LINK_COMP_ON) | 1415 | if (ipt->compflags & SC_LINK_COMP_ON) |
1416 | skb = isdn_ppp_compress(skb,&proto,ipt,ipts,1); | 1416 | skb = isdn_ppp_compress(skb, &proto, ipt, ipts, 1); |
1417 | 1417 | ||
1418 | if( (ipt->pppcfg & SC_COMP_PROT) && (proto <= 0xff) ) { | 1418 | if ((ipt->pppcfg & SC_COMP_PROT) && (proto <= 0xff)) { |
1419 | unsigned char *data = isdn_ppp_skb_push(&skb,1); | 1419 | unsigned char *data = isdn_ppp_skb_push(&skb, 1); |
1420 | if(!data) | 1420 | if (!data) |
1421 | goto unlock; | 1421 | goto unlock; |
1422 | data[0] = proto & 0xff; | 1422 | data[0] = proto & 0xff; |
1423 | } | 1423 | } |
1424 | else { | 1424 | else { |
1425 | unsigned char *data = isdn_ppp_skb_push(&skb,2); | 1425 | unsigned char *data = isdn_ppp_skb_push(&skb, 2); |
1426 | if(!data) | 1426 | if (!data) |
1427 | goto unlock; | 1427 | goto unlock; |
1428 | data[0] = (proto >> 8) & 0xff; | 1428 | data[0] = (proto >> 8) & 0xff; |
1429 | data[1] = proto & 0xff; | 1429 | data[1] = proto & 0xff; |
1430 | } | 1430 | } |
1431 | if(!(ipt->pppcfg & SC_COMP_AC)) { | 1431 | if (!(ipt->pppcfg & SC_COMP_AC)) { |
1432 | unsigned char *data = isdn_ppp_skb_push(&skb,2); | 1432 | unsigned char *data = isdn_ppp_skb_push(&skb, 2); |
1433 | if(!data) | 1433 | if (!data) |
1434 | goto unlock; | 1434 | goto unlock; |
1435 | data[0] = 0xff; /* All Stations */ | 1435 | data[0] = 0xff; /* All Stations */ |
1436 | data[1] = 0x03; /* Unnumbered information */ | 1436 | data[1] = 0x03; /* Unnumbered information */ |
@@ -1440,14 +1440,14 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
1440 | 1440 | ||
1441 | if (ipts->debug & 0x40) { | 1441 | if (ipts->debug & 0x40) { |
1442 | printk(KERN_DEBUG "skb xmit: len: %d\n", (int) skb->len); | 1442 | printk(KERN_DEBUG "skb xmit: len: %d\n", (int) skb->len); |
1443 | isdn_ppp_frame_log("xmit", skb->data, skb->len, 32,ipt->unit,lp->ppp_slot); | 1443 | isdn_ppp_frame_log("xmit", skb->data, skb->len, 32, ipt->unit, lp->ppp_slot); |
1444 | } | 1444 | } |
1445 | 1445 | ||
1446 | isdn_net_writebuf_skb(lp, skb); | 1446 | isdn_net_writebuf_skb(lp, skb); |
1447 | 1447 | ||
1448 | unlock: | 1448 | unlock: |
1449 | spin_unlock_bh(&lp->xmit_lock); | 1449 | spin_unlock_bh(&lp->xmit_lock); |
1450 | out: | 1450 | out: |
1451 | return retval; | 1451 | return retval; |
1452 | } | 1452 | } |
1453 | 1453 | ||
@@ -1488,12 +1488,12 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) | |||
1488 | p++; | 1488 | p++; |
1489 | *p = htons(proto); | 1489 | *p = htons(proto); |
1490 | } | 1490 | } |
1491 | 1491 | ||
1492 | drop |= is->pass_filter | 1492 | drop |= is->pass_filter |
1493 | && sk_run_filter(skb, is->pass_filter) == 0; | 1493 | && sk_run_filter(skb, is->pass_filter) == 0; |
1494 | drop |= is->active_filter | 1494 | drop |= is->active_filter |
1495 | && sk_run_filter(skb, is->active_filter) == 0; | 1495 | && sk_run_filter(skb, is->active_filter) == 0; |
1496 | 1496 | ||
1497 | skb_push(skb, IPPP_MAX_HEADER - 4); | 1497 | skb_push(skb, IPPP_MAX_HEADER - 4); |
1498 | return drop; | 1498 | return drop; |
1499 | } | 1499 | } |
@@ -1502,8 +1502,8 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) | |||
1502 | 1502 | ||
1503 | /* this is _not_ rfc1990 header, but something we convert both short and long | 1503 | /* this is _not_ rfc1990 header, but something we convert both short and long |
1504 | * headers to for convinience's sake: | 1504 | * headers to for convinience's sake: |
1505 | * byte 0 is flags as in rfc1990 | 1505 | * byte 0 is flags as in rfc1990 |
1506 | * bytes 1...4 is 24-bit seqence number converted to host byte order | 1506 | * bytes 1...4 is 24-bit seqence number converted to host byte order |
1507 | */ | 1507 | */ |
1508 | #define MP_HEADER_LEN 5 | 1508 | #define MP_HEADER_LEN 5 |
1509 | 1509 | ||
@@ -1511,51 +1511,51 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) | |||
1511 | #define MP_SHORTSEQ_MASK 0x00000fff | 1511 | #define MP_SHORTSEQ_MASK 0x00000fff |
1512 | #define MP_LONGSEQ_MAX MP_LONGSEQ_MASK | 1512 | #define MP_LONGSEQ_MAX MP_LONGSEQ_MASK |
1513 | #define MP_SHORTSEQ_MAX MP_SHORTSEQ_MASK | 1513 | #define MP_SHORTSEQ_MAX MP_SHORTSEQ_MASK |
1514 | #define MP_LONGSEQ_MAXBIT ((MP_LONGSEQ_MASK+1)>>1) | 1514 | #define MP_LONGSEQ_MAXBIT ((MP_LONGSEQ_MASK + 1) >> 1) |
1515 | #define MP_SHORTSEQ_MAXBIT ((MP_SHORTSEQ_MASK+1)>>1) | 1515 | #define MP_SHORTSEQ_MAXBIT ((MP_SHORTSEQ_MASK + 1) >> 1) |
1516 | 1516 | ||
1517 | /* sequence-wrap safe comparisons (for long sequence)*/ | 1517 | /* sequence-wrap safe comparisons (for long sequence)*/ |
1518 | #define MP_LT(a,b) ((a-b)&MP_LONGSEQ_MAXBIT) | 1518 | #define MP_LT(a, b) ((a - b) & MP_LONGSEQ_MAXBIT) |
1519 | #define MP_LE(a,b) !((b-a)&MP_LONGSEQ_MAXBIT) | 1519 | #define MP_LE(a, b) !((b - a) & MP_LONGSEQ_MAXBIT) |
1520 | #define MP_GT(a,b) ((b-a)&MP_LONGSEQ_MAXBIT) | 1520 | #define MP_GT(a, b) ((b - a) & MP_LONGSEQ_MAXBIT) |
1521 | #define MP_GE(a,b) !((a-b)&MP_LONGSEQ_MAXBIT) | 1521 | #define MP_GE(a, b) !((a - b) & MP_LONGSEQ_MAXBIT) |
1522 | 1522 | ||
1523 | #define MP_SEQ(f) ((*(u32*)(f->data+1))) | 1523 | #define MP_SEQ(f) ((*(u32 *)(f->data + 1))) |
1524 | #define MP_FLAGS(f) (f->data[0]) | 1524 | #define MP_FLAGS(f) (f->data[0]) |
1525 | 1525 | ||
1526 | static int isdn_ppp_mp_bundle_array_init(void) | 1526 | static int isdn_ppp_mp_bundle_array_init(void) |
1527 | { | 1527 | { |
1528 | int i; | 1528 | int i; |
1529 | int sz = ISDN_MAX_CHANNELS*sizeof(ippp_bundle); | 1529 | int sz = ISDN_MAX_CHANNELS * sizeof(ippp_bundle); |
1530 | if( (isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL ) | 1530 | if ((isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL) |
1531 | return -ENOMEM; | 1531 | return -ENOMEM; |
1532 | for( i = 0; i < ISDN_MAX_CHANNELS; i++ ) | 1532 | for (i = 0; i < ISDN_MAX_CHANNELS; i++) |
1533 | spin_lock_init(&isdn_ppp_bundle_arr[i].lock); | 1533 | spin_lock_init(&isdn_ppp_bundle_arr[i].lock); |
1534 | return 0; | 1534 | return 0; |
1535 | } | 1535 | } |
1536 | 1536 | ||
1537 | static ippp_bundle * isdn_ppp_mp_bundle_alloc(void) | 1537 | static ippp_bundle *isdn_ppp_mp_bundle_alloc(void) |
1538 | { | 1538 | { |
1539 | int i; | 1539 | int i; |
1540 | for( i = 0; i < ISDN_MAX_CHANNELS; i++ ) | 1540 | for (i = 0; i < ISDN_MAX_CHANNELS; i++) |
1541 | if (isdn_ppp_bundle_arr[i].ref_ct <= 0) | 1541 | if (isdn_ppp_bundle_arr[i].ref_ct <= 0) |
1542 | return (isdn_ppp_bundle_arr + i); | 1542 | return (isdn_ppp_bundle_arr + i); |
1543 | return NULL; | 1543 | return NULL; |
1544 | } | 1544 | } |
1545 | 1545 | ||
1546 | static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to ) | 1546 | static int isdn_ppp_mp_init(isdn_net_local *lp, ippp_bundle *add_to) |
1547 | { | 1547 | { |
1548 | struct ippp_struct * is; | 1548 | struct ippp_struct *is; |
1549 | 1549 | ||
1550 | if (lp->ppp_slot < 0) { | 1550 | if (lp->ppp_slot < 0) { |
1551 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", | 1551 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", |
1552 | __func__, lp->ppp_slot); | 1552 | __func__, lp->ppp_slot); |
1553 | return(-EINVAL); | 1553 | return (-EINVAL); |
1554 | } | 1554 | } |
1555 | 1555 | ||
1556 | is = ippp_table[lp->ppp_slot]; | 1556 | is = ippp_table[lp->ppp_slot]; |
1557 | if (add_to) { | 1557 | if (add_to) { |
1558 | if( lp->netdev->pb ) | 1558 | if (lp->netdev->pb) |
1559 | lp->netdev->pb->ref_ct--; | 1559 | lp->netdev->pb->ref_ct--; |
1560 | lp->netdev->pb = add_to; | 1560 | lp->netdev->pb = add_to; |
1561 | } else { /* first link in a bundle */ | 1561 | } else { /* first link in a bundle */ |
@@ -1568,76 +1568,76 @@ static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to ) | |||
1568 | lp->netdev->pb->seq = UINT_MAX; | 1568 | lp->netdev->pb->seq = UINT_MAX; |
1569 | } | 1569 | } |
1570 | lp->netdev->pb->ref_ct++; | 1570 | lp->netdev->pb->ref_ct++; |
1571 | 1571 | ||
1572 | is->last_link_seqno = 0; | 1572 | is->last_link_seqno = 0; |
1573 | return 0; | 1573 | return 0; |
1574 | } | 1574 | } |
1575 | 1575 | ||
1576 | static u32 isdn_ppp_mp_get_seq( int short_seq, | 1576 | static u32 isdn_ppp_mp_get_seq(int short_seq, |
1577 | struct sk_buff * skb, u32 last_seq ); | 1577 | struct sk_buff *skb, u32 last_seq); |
1578 | static struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp, | 1578 | static struct sk_buff *isdn_ppp_mp_discard(ippp_bundle *mp, |
1579 | struct sk_buff * from, struct sk_buff * to ); | 1579 | struct sk_buff *from, struct sk_buff *to); |
1580 | static void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp, | 1580 | static void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp, |
1581 | struct sk_buff * from, struct sk_buff * to ); | 1581 | struct sk_buff *from, struct sk_buff *to); |
1582 | static void isdn_ppp_mp_free_skb( ippp_bundle * mp, struct sk_buff * skb ); | 1582 | static void isdn_ppp_mp_free_skb(ippp_bundle *mp, struct sk_buff *skb); |
1583 | static void isdn_ppp_mp_print_recv_pkt( int slot, struct sk_buff * skb ); | 1583 | static void isdn_ppp_mp_print_recv_pkt(int slot, struct sk_buff *skb); |
1584 | 1584 | ||
1585 | static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, | 1585 | static void isdn_ppp_mp_receive(isdn_net_dev *net_dev, isdn_net_local *lp, |
1586 | struct sk_buff *skb) | 1586 | struct sk_buff *skb) |
1587 | { | 1587 | { |
1588 | struct ippp_struct *is; | 1588 | struct ippp_struct *is; |
1589 | isdn_net_local * lpq; | 1589 | isdn_net_local *lpq; |
1590 | ippp_bundle * mp; | 1590 | ippp_bundle *mp; |
1591 | isdn_mppp_stats * stats; | 1591 | isdn_mppp_stats *stats; |
1592 | struct sk_buff * newfrag, * frag, * start, *nextf; | 1592 | struct sk_buff *newfrag, *frag, *start, *nextf; |
1593 | u32 newseq, minseq, thisseq; | 1593 | u32 newseq, minseq, thisseq; |
1594 | unsigned long flags; | 1594 | unsigned long flags; |
1595 | int slot; | 1595 | int slot; |
1596 | 1596 | ||
1597 | spin_lock_irqsave(&net_dev->pb->lock, flags); | 1597 | spin_lock_irqsave(&net_dev->pb->lock, flags); |
1598 | mp = net_dev->pb; | 1598 | mp = net_dev->pb; |
1599 | stats = &mp->stats; | 1599 | stats = &mp->stats; |
1600 | slot = lp->ppp_slot; | 1600 | slot = lp->ppp_slot; |
1601 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 1601 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
1602 | printk(KERN_ERR "%s: lp->ppp_slot(%d)\n", | 1602 | printk(KERN_ERR "%s: lp->ppp_slot(%d)\n", |
1603 | __func__, lp->ppp_slot); | 1603 | __func__, lp->ppp_slot); |
1604 | stats->frame_drops++; | 1604 | stats->frame_drops++; |
1605 | dev_kfree_skb(skb); | 1605 | dev_kfree_skb(skb); |
1606 | spin_unlock_irqrestore(&mp->lock, flags); | 1606 | spin_unlock_irqrestore(&mp->lock, flags); |
1607 | return; | 1607 | return; |
1608 | } | 1608 | } |
1609 | is = ippp_table[slot]; | 1609 | is = ippp_table[slot]; |
1610 | if( ++mp->frames > stats->max_queue_len ) | 1610 | if (++mp->frames > stats->max_queue_len) |
1611 | stats->max_queue_len = mp->frames; | 1611 | stats->max_queue_len = mp->frames; |
1612 | 1612 | ||
1613 | if (is->debug & 0x8) | 1613 | if (is->debug & 0x8) |
1614 | isdn_ppp_mp_print_recv_pkt(lp->ppp_slot, skb); | 1614 | isdn_ppp_mp_print_recv_pkt(lp->ppp_slot, skb); |
1615 | 1615 | ||
1616 | newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ, | 1616 | newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ, |
1617 | skb, is->last_link_seqno); | 1617 | skb, is->last_link_seqno); |
1618 | 1618 | ||
1619 | 1619 | ||
1620 | /* if this packet seq # is less than last already processed one, | 1620 | /* if this packet seq # is less than last already processed one, |
1621 | * toss it right away, but check for sequence start case first | 1621 | * toss it right away, but check for sequence start case first |
1622 | */ | 1622 | */ |
1623 | if( mp->seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT) ) { | 1623 | if (mp->seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT)) { |
1624 | mp->seq = newseq; /* the first packet: required for | 1624 | mp->seq = newseq; /* the first packet: required for |
1625 | * rfc1990 non-compliant clients -- | 1625 | * rfc1990 non-compliant clients -- |
1626 | * prevents constant packet toss */ | 1626 | * prevents constant packet toss */ |
1627 | } else if( MP_LT(newseq, mp->seq) ) { | 1627 | } else if (MP_LT(newseq, mp->seq)) { |
1628 | stats->frame_drops++; | 1628 | stats->frame_drops++; |
1629 | isdn_ppp_mp_free_skb(mp, skb); | 1629 | isdn_ppp_mp_free_skb(mp, skb); |
1630 | spin_unlock_irqrestore(&mp->lock, flags); | 1630 | spin_unlock_irqrestore(&mp->lock, flags); |
1631 | return; | 1631 | return; |
1632 | } | 1632 | } |
1633 | 1633 | ||
1634 | /* find the minimum received sequence number over all links */ | 1634 | /* find the minimum received sequence number over all links */ |
1635 | is->last_link_seqno = minseq = newseq; | 1635 | is->last_link_seqno = minseq = newseq; |
1636 | for (lpq = net_dev->queue;;) { | 1636 | for (lpq = net_dev->queue;;) { |
1637 | slot = lpq->ppp_slot; | 1637 | slot = lpq->ppp_slot; |
1638 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 1638 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
1639 | printk(KERN_ERR "%s: lpq->ppp_slot(%d)\n", | 1639 | printk(KERN_ERR "%s: lpq->ppp_slot(%d)\n", |
1640 | __func__, lpq->ppp_slot); | 1640 | __func__, lpq->ppp_slot); |
1641 | } else { | 1641 | } else { |
1642 | u32 lls = ippp_table[slot]->last_link_seqno; | 1642 | u32 lls = ippp_table[slot]->last_link_seqno; |
1643 | if (MP_LT(lls, minseq)) | 1643 | if (MP_LT(lls, minseq)) |
@@ -1651,17 +1651,17 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, | |||
1651 | * packets */ | 1651 | * packets */ |
1652 | newfrag = skb; | 1652 | newfrag = skb; |
1653 | 1653 | ||
1654 | /* if this new fragment is before the first one, then enqueue it now. */ | 1654 | /* if this new fragment is before the first one, then enqueue it now. */ |
1655 | if ((frag = mp->frags) == NULL || MP_LT(newseq, MP_SEQ(frag))) { | 1655 | if ((frag = mp->frags) == NULL || MP_LT(newseq, MP_SEQ(frag))) { |
1656 | newfrag->next = frag; | 1656 | newfrag->next = frag; |
1657 | mp->frags = frag = newfrag; | 1657 | mp->frags = frag = newfrag; |
1658 | newfrag = NULL; | 1658 | newfrag = NULL; |
1659 | } | 1659 | } |
1660 | 1660 | ||
1661 | start = MP_FLAGS(frag) & MP_BEGIN_FRAG && | 1661 | start = MP_FLAGS(frag) & MP_BEGIN_FRAG && |
1662 | MP_SEQ(frag) == mp->seq ? frag : NULL; | 1662 | MP_SEQ(frag) == mp->seq ? frag : NULL; |
1663 | 1663 | ||
1664 | /* | 1664 | /* |
1665 | * main fragment traversing loop | 1665 | * main fragment traversing loop |
1666 | * | 1666 | * |
1667 | * try to accomplish several tasks: | 1667 | * try to accomplish several tasks: |
@@ -1675,71 +1675,71 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, | |||
1675 | * come to complete such sequence and it should be discarded | 1675 | * come to complete such sequence and it should be discarded |
1676 | * | 1676 | * |
1677 | * loop completes when we accomplished the following tasks: | 1677 | * loop completes when we accomplished the following tasks: |
1678 | * - new fragment is inserted in the proper sequence ('newfrag' is | 1678 | * - new fragment is inserted in the proper sequence ('newfrag' is |
1679 | * set to NULL) | 1679 | * set to NULL) |
1680 | * - we hit a gap in the sequence, so no reassembly/processing is | 1680 | * - we hit a gap in the sequence, so no reassembly/processing is |
1681 | * possible ('start' would be set to NULL) | 1681 | * possible ('start' would be set to NULL) |
1682 | * | 1682 | * |
1683 | * algorithm for this code is derived from code in the book | 1683 | * algorithm for this code is derived from code in the book |
1684 | * 'PPP Design And Debugging' by James Carlson (Addison-Wesley) | 1684 | * 'PPP Design And Debugging' by James Carlson (Addison-Wesley) |
1685 | */ | 1685 | */ |
1686 | while (start != NULL || newfrag != NULL) { | 1686 | while (start != NULL || newfrag != NULL) { |
1687 | 1687 | ||
1688 | thisseq = MP_SEQ(frag); | 1688 | thisseq = MP_SEQ(frag); |
1689 | nextf = frag->next; | 1689 | nextf = frag->next; |
1690 | 1690 | ||
1691 | /* drop any duplicate fragments */ | 1691 | /* drop any duplicate fragments */ |
1692 | if (newfrag != NULL && thisseq == newseq) { | 1692 | if (newfrag != NULL && thisseq == newseq) { |
1693 | isdn_ppp_mp_free_skb(mp, newfrag); | 1693 | isdn_ppp_mp_free_skb(mp, newfrag); |
1694 | newfrag = NULL; | 1694 | newfrag = NULL; |
1695 | } | 1695 | } |
1696 | 1696 | ||
1697 | /* insert new fragment before next element if possible. */ | 1697 | /* insert new fragment before next element if possible. */ |
1698 | if (newfrag != NULL && (nextf == NULL || | 1698 | if (newfrag != NULL && (nextf == NULL || |
1699 | MP_LT(newseq, MP_SEQ(nextf)))) { | 1699 | MP_LT(newseq, MP_SEQ(nextf)))) { |
1700 | newfrag->next = nextf; | 1700 | newfrag->next = nextf; |
1701 | frag->next = nextf = newfrag; | 1701 | frag->next = nextf = newfrag; |
1702 | newfrag = NULL; | 1702 | newfrag = NULL; |
1703 | } | 1703 | } |
1704 | 1704 | ||
1705 | if (start != NULL) { | 1705 | if (start != NULL) { |
1706 | /* check for misplaced start */ | 1706 | /* check for misplaced start */ |
1707 | if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) { | 1707 | if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) { |
1708 | printk(KERN_WARNING"isdn_mppp(seq %d): new " | 1708 | printk(KERN_WARNING"isdn_mppp(seq %d): new " |
1709 | "BEGIN flag with no prior END", thisseq); | 1709 | "BEGIN flag with no prior END", thisseq); |
1710 | stats->seqerrs++; | 1710 | stats->seqerrs++; |
1711 | stats->frame_drops++; | 1711 | stats->frame_drops++; |
1712 | start = isdn_ppp_mp_discard(mp, start,frag); | 1712 | start = isdn_ppp_mp_discard(mp, start, frag); |
1713 | nextf = frag->next; | 1713 | nextf = frag->next; |
1714 | } | 1714 | } |
1715 | } else if (MP_LE(thisseq, minseq)) { | 1715 | } else if (MP_LE(thisseq, minseq)) { |
1716 | if (MP_FLAGS(frag) & MP_BEGIN_FRAG) | 1716 | if (MP_FLAGS(frag) & MP_BEGIN_FRAG) |
1717 | start = frag; | 1717 | start = frag; |
1718 | else { | 1718 | else { |
1719 | if (MP_FLAGS(frag) & MP_END_FRAG) | 1719 | if (MP_FLAGS(frag) & MP_END_FRAG) |
1720 | stats->frame_drops++; | 1720 | stats->frame_drops++; |
1721 | if( mp->frags == frag ) | 1721 | if (mp->frags == frag) |
1722 | mp->frags = nextf; | 1722 | mp->frags = nextf; |
1723 | isdn_ppp_mp_free_skb(mp, frag); | 1723 | isdn_ppp_mp_free_skb(mp, frag); |
1724 | frag = nextf; | 1724 | frag = nextf; |
1725 | continue; | 1725 | continue; |
1726 | } | 1726 | } |
1727 | } | 1727 | } |
1728 | 1728 | ||
1729 | /* if start is non-null and we have end fragment, then | 1729 | /* if start is non-null and we have end fragment, then |
1730 | * we have full reassembly sequence -- reassemble | 1730 | * we have full reassembly sequence -- reassemble |
1731 | * and process packet now | 1731 | * and process packet now |
1732 | */ | 1732 | */ |
1733 | if (start != NULL && (MP_FLAGS(frag) & MP_END_FRAG)) { | 1733 | if (start != NULL && (MP_FLAGS(frag) & MP_END_FRAG)) { |
1734 | minseq = mp->seq = (thisseq+1) & MP_LONGSEQ_MASK; | 1734 | minseq = mp->seq = (thisseq + 1) & MP_LONGSEQ_MASK; |
1735 | /* Reassemble the packet then dispatch it */ | 1735 | /* Reassemble the packet then dispatch it */ |
1736 | isdn_ppp_mp_reassembly(net_dev, lp, start, nextf); | 1736 | isdn_ppp_mp_reassembly(net_dev, lp, start, nextf); |
1737 | |||
1738 | start = NULL; | ||
1739 | frag = NULL; | ||
1740 | 1737 | ||
1741 | mp->frags = nextf; | 1738 | start = NULL; |
1742 | } | 1739 | frag = NULL; |
1740 | |||
1741 | mp->frags = nextf; | ||
1742 | } | ||
1743 | 1743 | ||
1744 | /* check if need to update start pointer: if we just | 1744 | /* check if need to update start pointer: if we just |
1745 | * reassembled the packet and sequence is contiguous | 1745 | * reassembled the packet and sequence is contiguous |
@@ -1749,48 +1749,48 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, | |||
1749 | * if sequence is not contiguous, either clear everything | 1749 | * if sequence is not contiguous, either clear everything |
1750 | * below low watermark and set start to the next frag or | 1750 | * below low watermark and set start to the next frag or |
1751 | * clear start ptr. | 1751 | * clear start ptr. |
1752 | */ | 1752 | */ |
1753 | if (nextf != NULL && | 1753 | if (nextf != NULL && |
1754 | ((thisseq+1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) { | 1754 | ((thisseq + 1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) { |
1755 | /* if we just reassembled and the next one is here, | 1755 | /* if we just reassembled and the next one is here, |
1756 | * then start another reassembly. */ | 1756 | * then start another reassembly. */ |
1757 | 1757 | ||
1758 | if (frag == NULL) { | 1758 | if (frag == NULL) { |
1759 | if (MP_FLAGS(nextf) & MP_BEGIN_FRAG) | 1759 | if (MP_FLAGS(nextf) & MP_BEGIN_FRAG) |
1760 | start = nextf; | 1760 | start = nextf; |
1761 | else | 1761 | else |
1762 | { | 1762 | { |
1763 | printk(KERN_WARNING"isdn_mppp(seq %d):" | 1763 | printk(KERN_WARNING"isdn_mppp(seq %d):" |
1764 | " END flag with no following " | 1764 | " END flag with no following " |
1765 | "BEGIN", thisseq); | 1765 | "BEGIN", thisseq); |
1766 | stats->seqerrs++; | 1766 | stats->seqerrs++; |
1767 | } | 1767 | } |
1768 | } | 1768 | } |
1769 | 1769 | ||
1770 | } else { | 1770 | } else { |
1771 | if ( nextf != NULL && frag != NULL && | 1771 | if (nextf != NULL && frag != NULL && |
1772 | MP_LT(thisseq, minseq)) { | 1772 | MP_LT(thisseq, minseq)) { |
1773 | /* we've got a break in the sequence | 1773 | /* we've got a break in the sequence |
1774 | * and we not at the end yet | 1774 | * and we not at the end yet |
1775 | * and we did not just reassembled | 1775 | * and we did not just reassembled |
1776 | *(if we did, there wouldn't be anything before) | 1776 | *(if we did, there wouldn't be anything before) |
1777 | * and we below the low watermark | 1777 | * and we below the low watermark |
1778 | * discard all the frames below low watermark | 1778 | * discard all the frames below low watermark |
1779 | * and start over */ | 1779 | * and start over */ |
1780 | stats->frame_drops++; | 1780 | stats->frame_drops++; |
1781 | mp->frags = isdn_ppp_mp_discard(mp,start,nextf); | 1781 | mp->frags = isdn_ppp_mp_discard(mp, start, nextf); |
1782 | } | 1782 | } |
1783 | /* break in the sequence, no reassembly */ | 1783 | /* break in the sequence, no reassembly */ |
1784 | start = NULL; | 1784 | start = NULL; |
1785 | } | 1785 | } |
1786 | 1786 | ||
1787 | frag = nextf; | 1787 | frag = nextf; |
1788 | } /* while -- main loop */ | 1788 | } /* while -- main loop */ |
1789 | 1789 | ||
1790 | if (mp->frags == NULL) | 1790 | if (mp->frags == NULL) |
1791 | mp->frags = frag; | 1791 | mp->frags = frag; |
1792 | 1792 | ||
1793 | /* rather straighforward way to deal with (not very) possible | 1793 | /* rather straighforward way to deal with (not very) possible |
1794 | * queue overflow */ | 1794 | * queue overflow */ |
1795 | if (mp->frames > MP_MAX_QUEUE_LEN) { | 1795 | if (mp->frames > MP_MAX_QUEUE_LEN) { |
1796 | stats->overflows++; | 1796 | stats->overflows++; |
@@ -1803,11 +1803,11 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, | |||
1803 | spin_unlock_irqrestore(&mp->lock, flags); | 1803 | spin_unlock_irqrestore(&mp->lock, flags); |
1804 | } | 1804 | } |
1805 | 1805 | ||
1806 | static void isdn_ppp_mp_cleanup( isdn_net_local * lp ) | 1806 | static void isdn_ppp_mp_cleanup(isdn_net_local *lp) |
1807 | { | 1807 | { |
1808 | struct sk_buff * frag = lp->netdev->pb->frags; | 1808 | struct sk_buff *frag = lp->netdev->pb->frags; |
1809 | struct sk_buff * nextfrag; | 1809 | struct sk_buff *nextfrag; |
1810 | while( frag ) { | 1810 | while (frag) { |
1811 | nextfrag = frag->next; | 1811 | nextfrag = frag->next; |
1812 | isdn_ppp_mp_free_skb(lp->netdev->pb, frag); | 1812 | isdn_ppp_mp_free_skb(lp->netdev->pb, frag); |
1813 | frag = nextfrag; | 1813 | frag = nextfrag; |
@@ -1815,117 +1815,117 @@ static void isdn_ppp_mp_cleanup( isdn_net_local * lp ) | |||
1815 | lp->netdev->pb->frags = NULL; | 1815 | lp->netdev->pb->frags = NULL; |
1816 | } | 1816 | } |
1817 | 1817 | ||
1818 | static u32 isdn_ppp_mp_get_seq( int short_seq, | 1818 | static u32 isdn_ppp_mp_get_seq(int short_seq, |
1819 | struct sk_buff * skb, u32 last_seq ) | 1819 | struct sk_buff *skb, u32 last_seq) |
1820 | { | 1820 | { |
1821 | u32 seq; | 1821 | u32 seq; |
1822 | int flags = skb->data[0] & (MP_BEGIN_FRAG | MP_END_FRAG); | 1822 | int flags = skb->data[0] & (MP_BEGIN_FRAG | MP_END_FRAG); |
1823 | 1823 | ||
1824 | if( !short_seq ) | 1824 | if (!short_seq) |
1825 | { | 1825 | { |
1826 | seq = ntohl(*(__be32 *)skb->data) & MP_LONGSEQ_MASK; | 1826 | seq = ntohl(*(__be32 *)skb->data) & MP_LONGSEQ_MASK; |
1827 | skb_push(skb,1); | 1827 | skb_push(skb, 1); |
1828 | } | 1828 | } |
1829 | else | 1829 | else |
1830 | { | 1830 | { |
1831 | /* convert 12-bit short seq number to 24-bit long one | 1831 | /* convert 12-bit short seq number to 24-bit long one |
1832 | */ | 1832 | */ |
1833 | seq = ntohs(*(__be16 *)skb->data) & MP_SHORTSEQ_MASK; | 1833 | seq = ntohs(*(__be16 *)skb->data) & MP_SHORTSEQ_MASK; |
1834 | 1834 | ||
1835 | /* check for seqence wrap */ | 1835 | /* check for seqence wrap */ |
1836 | if( !(seq & MP_SHORTSEQ_MAXBIT) && | 1836 | if (!(seq & MP_SHORTSEQ_MAXBIT) && |
1837 | (last_seq & MP_SHORTSEQ_MAXBIT) && | 1837 | (last_seq & MP_SHORTSEQ_MAXBIT) && |
1838 | (unsigned long)last_seq <= MP_LONGSEQ_MAX ) | 1838 | (unsigned long)last_seq <= MP_LONGSEQ_MAX) |
1839 | seq |= (last_seq + MP_SHORTSEQ_MAX+1) & | 1839 | seq |= (last_seq + MP_SHORTSEQ_MAX + 1) & |
1840 | (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); | 1840 | (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); |
1841 | else | 1841 | else |
1842 | seq |= last_seq & (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); | 1842 | seq |= last_seq & (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); |
1843 | 1843 | ||
1844 | skb_push(skb, 3); /* put converted seqence back in skb */ | 1844 | skb_push(skb, 3); /* put converted seqence back in skb */ |
1845 | } | 1845 | } |
1846 | *(u32*)(skb->data+1) = seq; /* put seqence back in _host_ byte | 1846 | *(u32 *)(skb->data + 1) = seq; /* put seqence back in _host_ byte |
1847 | * order */ | 1847 | * order */ |
1848 | skb->data[0] = flags; /* restore flags */ | 1848 | skb->data[0] = flags; /* restore flags */ |
1849 | return seq; | 1849 | return seq; |
1850 | } | 1850 | } |
1851 | 1851 | ||
1852 | struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp, | 1852 | struct sk_buff *isdn_ppp_mp_discard(ippp_bundle *mp, |
1853 | struct sk_buff * from, struct sk_buff * to ) | 1853 | struct sk_buff *from, struct sk_buff *to) |
1854 | { | 1854 | { |
1855 | if( from ) | 1855 | if (from) |
1856 | while (from != to) { | 1856 | while (from != to) { |
1857 | struct sk_buff * next = from->next; | 1857 | struct sk_buff *next = from->next; |
1858 | isdn_ppp_mp_free_skb(mp, from); | 1858 | isdn_ppp_mp_free_skb(mp, from); |
1859 | from = next; | 1859 | from = next; |
1860 | } | 1860 | } |
1861 | return from; | 1861 | return from; |
1862 | } | 1862 | } |
1863 | 1863 | ||
1864 | void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp, | 1864 | void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp, |
1865 | struct sk_buff * from, struct sk_buff * to ) | 1865 | struct sk_buff *from, struct sk_buff *to) |
1866 | { | 1866 | { |
1867 | ippp_bundle * mp = net_dev->pb; | 1867 | ippp_bundle *mp = net_dev->pb; |
1868 | int proto; | 1868 | int proto; |
1869 | struct sk_buff * skb; | 1869 | struct sk_buff *skb; |
1870 | unsigned int tot_len; | 1870 | unsigned int tot_len; |
1871 | 1871 | ||
1872 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | 1872 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { |
1873 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", | 1873 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", |
1874 | __func__, lp->ppp_slot); | 1874 | __func__, lp->ppp_slot); |
1875 | return; | 1875 | return; |
1876 | } | 1876 | } |
1877 | if( MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG) ) { | 1877 | if (MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG)) { |
1878 | if( ippp_table[lp->ppp_slot]->debug & 0x40 ) | 1878 | if (ippp_table[lp->ppp_slot]->debug & 0x40) |
1879 | printk(KERN_DEBUG "isdn_mppp: reassembly: frame %d, " | 1879 | printk(KERN_DEBUG "isdn_mppp: reassembly: frame %d, " |
1880 | "len %d\n", MP_SEQ(from), from->len ); | 1880 | "len %d\n", MP_SEQ(from), from->len); |
1881 | skb = from; | 1881 | skb = from; |
1882 | skb_pull(skb, MP_HEADER_LEN); | 1882 | skb_pull(skb, MP_HEADER_LEN); |
1883 | mp->frames--; | 1883 | mp->frames--; |
1884 | } else { | 1884 | } else { |
1885 | struct sk_buff * frag; | 1885 | struct sk_buff *frag; |
1886 | int n; | 1886 | int n; |
1887 | 1887 | ||
1888 | for(tot_len=n=0, frag=from; frag != to; frag=frag->next, n++) | 1888 | for (tot_len = n = 0, frag = from; frag != to; frag = frag->next, n++) |
1889 | tot_len += frag->len - MP_HEADER_LEN; | 1889 | tot_len += frag->len - MP_HEADER_LEN; |
1890 | 1890 | ||
1891 | if( ippp_table[lp->ppp_slot]->debug & 0x40 ) | 1891 | if (ippp_table[lp->ppp_slot]->debug & 0x40) |
1892 | printk(KERN_DEBUG"isdn_mppp: reassembling frames %d " | 1892 | printk(KERN_DEBUG"isdn_mppp: reassembling frames %d " |
1893 | "to %d, len %d\n", MP_SEQ(from), | 1893 | "to %d, len %d\n", MP_SEQ(from), |
1894 | (MP_SEQ(from)+n-1) & MP_LONGSEQ_MASK, tot_len ); | 1894 | (MP_SEQ(from) + n - 1) & MP_LONGSEQ_MASK, tot_len); |
1895 | if( (skb = dev_alloc_skb(tot_len)) == NULL ) { | 1895 | if ((skb = dev_alloc_skb(tot_len)) == NULL) { |
1896 | printk(KERN_ERR "isdn_mppp: cannot allocate sk buff " | 1896 | printk(KERN_ERR "isdn_mppp: cannot allocate sk buff " |
1897 | "of size %d\n", tot_len); | 1897 | "of size %d\n", tot_len); |
1898 | isdn_ppp_mp_discard(mp, from, to); | 1898 | isdn_ppp_mp_discard(mp, from, to); |
1899 | return; | 1899 | return; |
1900 | } | 1900 | } |
1901 | 1901 | ||
1902 | while( from != to ) { | 1902 | while (from != to) { |
1903 | unsigned int len = from->len - MP_HEADER_LEN; | 1903 | unsigned int len = from->len - MP_HEADER_LEN; |
1904 | 1904 | ||
1905 | skb_copy_from_linear_data_offset(from, MP_HEADER_LEN, | 1905 | skb_copy_from_linear_data_offset(from, MP_HEADER_LEN, |
1906 | skb_put(skb,len), | 1906 | skb_put(skb, len), |
1907 | len); | 1907 | len); |
1908 | frag = from->next; | 1908 | frag = from->next; |
1909 | isdn_ppp_mp_free_skb(mp, from); | 1909 | isdn_ppp_mp_free_skb(mp, from); |
1910 | from = frag; | 1910 | from = frag; |
1911 | } | 1911 | } |
1912 | } | 1912 | } |
1913 | proto = isdn_ppp_strip_proto(skb); | 1913 | proto = isdn_ppp_strip_proto(skb); |
1914 | isdn_ppp_push_higher(net_dev, lp, skb, proto); | 1914 | isdn_ppp_push_higher(net_dev, lp, skb, proto); |
1915 | } | 1915 | } |
1916 | 1916 | ||
1917 | static void isdn_ppp_mp_free_skb(ippp_bundle * mp, struct sk_buff * skb) | 1917 | static void isdn_ppp_mp_free_skb(ippp_bundle *mp, struct sk_buff *skb) |
1918 | { | 1918 | { |
1919 | dev_kfree_skb(skb); | 1919 | dev_kfree_skb(skb); |
1920 | mp->frames--; | 1920 | mp->frames--; |
1921 | } | 1921 | } |
1922 | 1922 | ||
1923 | static void isdn_ppp_mp_print_recv_pkt( int slot, struct sk_buff * skb ) | 1923 | static void isdn_ppp_mp_print_recv_pkt(int slot, struct sk_buff *skb) |
1924 | { | 1924 | { |
1925 | printk(KERN_DEBUG "mp_recv: %d/%d -> %02x %02x %02x %02x %02x %02x\n", | 1925 | printk(KERN_DEBUG "mp_recv: %d/%d -> %02x %02x %02x %02x %02x %02x\n", |
1926 | slot, (int) skb->len, | 1926 | slot, (int) skb->len, |
1927 | (int) skb->data[0], (int) skb->data[1], (int) skb->data[2], | 1927 | (int) skb->data[0], (int) skb->data[1], (int) skb->data[2], |
1928 | (int) skb->data[3], (int) skb->data[4], (int) skb->data[5]); | 1928 | (int) skb->data[3], (int) skb->data[4], (int) skb->data[5]); |
1929 | } | 1929 | } |
1930 | 1930 | ||
1931 | static int | 1931 | static int |
@@ -1944,18 +1944,18 @@ isdn_ppp_bundle(struct ippp_struct *is, int unit) | |||
1944 | return -EINVAL; | 1944 | return -EINVAL; |
1945 | } | 1945 | } |
1946 | 1946 | ||
1947 | spin_lock_irqsave(&p->pb->lock, flags); | 1947 | spin_lock_irqsave(&p->pb->lock, flags); |
1948 | 1948 | ||
1949 | nlp = is->lp; | 1949 | nlp = is->lp; |
1950 | lp = p->queue; | 1950 | lp = p->queue; |
1951 | if( nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS || | 1951 | if (nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS || |
1952 | lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS ) { | 1952 | lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { |
1953 | printk(KERN_ERR "ippp_bundle: binding to invalid slot %d\n", | 1953 | printk(KERN_ERR "ippp_bundle: binding to invalid slot %d\n", |
1954 | nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS ? | 1954 | nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS ? |
1955 | nlp->ppp_slot : lp->ppp_slot ); | 1955 | nlp->ppp_slot : lp->ppp_slot); |
1956 | rc = -EINVAL; | 1956 | rc = -EINVAL; |
1957 | goto out; | 1957 | goto out; |
1958 | } | 1958 | } |
1959 | 1959 | ||
1960 | isdn_net_add_to_bundle(p, nlp); | 1960 | isdn_net_add_to_bundle(p, nlp); |
1961 | 1961 | ||
@@ -1971,9 +1971,9 @@ out: | |||
1971 | spin_unlock_irqrestore(&p->pb->lock, flags); | 1971 | spin_unlock_irqrestore(&p->pb->lock, flags); |
1972 | return rc; | 1972 | return rc; |
1973 | } | 1973 | } |
1974 | 1974 | ||
1975 | #endif /* CONFIG_ISDN_MPP */ | 1975 | #endif /* CONFIG_ISDN_MPP */ |
1976 | 1976 | ||
1977 | /* | 1977 | /* |
1978 | * network device ioctl handlers | 1978 | * network device ioctl handlers |
1979 | */ | 1979 | */ |
@@ -2020,7 +2020,7 @@ isdn_ppp_dev_ioctl_stats(int slot, struct ifreq *ifr, struct net_device *dev) | |||
2020 | int | 2020 | int |
2021 | isdn_ppp_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 2021 | isdn_ppp_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
2022 | { | 2022 | { |
2023 | int error=0; | 2023 | int error = 0; |
2024 | int len; | 2024 | int len; |
2025 | isdn_net_local *lp = netdev_priv(dev); | 2025 | isdn_net_local *lp = netdev_priv(dev); |
2026 | 2026 | ||
@@ -2030,18 +2030,18 @@ isdn_ppp_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
2030 | 2030 | ||
2031 | switch (cmd) { | 2031 | switch (cmd) { |
2032 | #define PPP_VERSION "2.3.7" | 2032 | #define PPP_VERSION "2.3.7" |
2033 | case SIOCGPPPVER: | 2033 | case SIOCGPPPVER: |
2034 | len = strlen(PPP_VERSION) + 1; | 2034 | len = strlen(PPP_VERSION) + 1; |
2035 | if (copy_to_user(ifr->ifr_data, PPP_VERSION, len)) | 2035 | if (copy_to_user(ifr->ifr_data, PPP_VERSION, len)) |
2036 | error = -EFAULT; | 2036 | error = -EFAULT; |
2037 | break; | 2037 | break; |
2038 | 2038 | ||
2039 | case SIOCGPPPSTATS: | 2039 | case SIOCGPPPSTATS: |
2040 | error = isdn_ppp_dev_ioctl_stats(lp->ppp_slot, ifr, dev); | 2040 | error = isdn_ppp_dev_ioctl_stats(lp->ppp_slot, ifr, dev); |
2041 | break; | 2041 | break; |
2042 | default: | 2042 | default: |
2043 | error = -EINVAL; | 2043 | error = -EINVAL; |
2044 | break; | 2044 | break; |
2045 | } | 2045 | } |
2046 | return error; | 2046 | return error; |
2047 | } | 2047 | } |
@@ -2050,9 +2050,9 @@ static int | |||
2050 | isdn_ppp_if_get_unit(char *name) | 2050 | isdn_ppp_if_get_unit(char *name) |
2051 | { | 2051 | { |
2052 | int len, | 2052 | int len, |
2053 | i, | 2053 | i, |
2054 | unit = 0, | 2054 | unit = 0, |
2055 | deci; | 2055 | deci; |
2056 | 2056 | ||
2057 | len = strlen(name); | 2057 | len = strlen(name); |
2058 | 2058 | ||
@@ -2129,7 +2129,7 @@ isdn_ppp_hangup_slave(char *name) | |||
2129 | break; | 2129 | break; |
2130 | } else if (mlp->flags & ISDN_NET_CONNECTED) | 2130 | } else if (mlp->flags & ISDN_NET_CONNECTED) |
2131 | break; | 2131 | break; |
2132 | 2132 | ||
2133 | sdev = mlp->slave; | 2133 | sdev = mlp->slave; |
2134 | } | 2134 | } |
2135 | if (!sdev) | 2135 | if (!sdev) |
@@ -2202,8 +2202,8 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto, | |||
2202 | 2202 | ||
2203 | /* Alloc large enough skb */ | 2203 | /* Alloc large enough skb */ |
2204 | hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen; | 2204 | hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen; |
2205 | skb = alloc_skb(len + hl + 16,GFP_ATOMIC); | 2205 | skb = alloc_skb(len + hl + 16, GFP_ATOMIC); |
2206 | if(!skb) { | 2206 | if (!skb) { |
2207 | printk(KERN_WARNING | 2207 | printk(KERN_WARNING |
2208 | "ippp: CCP cannot send reset - out of memory\n"); | 2208 | "ippp: CCP cannot send reset - out of memory\n"); |
2209 | return; | 2209 | return; |
@@ -2211,7 +2211,7 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto, | |||
2211 | skb_reserve(skb, hl); | 2211 | skb_reserve(skb, hl); |
2212 | 2212 | ||
2213 | /* We may need to stuff an address and control field first */ | 2213 | /* We may need to stuff an address and control field first */ |
2214 | if(!(is->pppcfg & SC_COMP_AC)) { | 2214 | if (!(is->pppcfg & SC_COMP_AC)) { |
2215 | p = skb_put(skb, 2); | 2215 | p = skb_put(skb, 2); |
2216 | *p++ = 0xff; | 2216 | *p++ = 0xff; |
2217 | *p++ = 0x03; | 2217 | *p++ = 0x03; |
@@ -2228,14 +2228,14 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto, | |||
2228 | *p++ = (cnt & 0xff); | 2228 | *p++ = (cnt & 0xff); |
2229 | 2229 | ||
2230 | /* Now stuff remaining bytes */ | 2230 | /* Now stuff remaining bytes */ |
2231 | if(len) { | 2231 | if (len) { |
2232 | p = skb_put(skb, len); | 2232 | p = skb_put(skb, len); |
2233 | memcpy(p, data, len); | 2233 | memcpy(p, data, len); |
2234 | } | 2234 | } |
2235 | 2235 | ||
2236 | /* skb is now ready for xmit */ | 2236 | /* skb is now ready for xmit */ |
2237 | printk(KERN_DEBUG "Sending CCP Frame:\n"); | 2237 | printk(KERN_DEBUG "Sending CCP Frame:\n"); |
2238 | isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot); | 2238 | isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot); |
2239 | 2239 | ||
2240 | isdn_net_write_super(lp, skb); | 2240 | isdn_net_write_super(lp, skb); |
2241 | } | 2241 | } |
@@ -2245,7 +2245,7 @@ static struct ippp_ccp_reset *isdn_ppp_ccp_reset_alloc(struct ippp_struct *is) | |||
2245 | { | 2245 | { |
2246 | struct ippp_ccp_reset *r; | 2246 | struct ippp_ccp_reset *r; |
2247 | r = kzalloc(sizeof(struct ippp_ccp_reset), GFP_KERNEL); | 2247 | r = kzalloc(sizeof(struct ippp_ccp_reset), GFP_KERNEL); |
2248 | if(!r) { | 2248 | if (!r) { |
2249 | printk(KERN_ERR "ippp_ccp: failed to allocate reset data" | 2249 | printk(KERN_ERR "ippp_ccp: failed to allocate reset data" |
2250 | " structure - no mem\n"); | 2250 | " structure - no mem\n"); |
2251 | return NULL; | 2251 | return NULL; |
@@ -2262,8 +2262,8 @@ static void isdn_ppp_ccp_reset_free(struct ippp_struct *is) | |||
2262 | 2262 | ||
2263 | printk(KERN_DEBUG "ippp_ccp: freeing reset data structure %p\n", | 2263 | printk(KERN_DEBUG "ippp_ccp: freeing reset data structure %p\n", |
2264 | is->reset); | 2264 | is->reset); |
2265 | for(id = 0; id < 256; id++) { | 2265 | for (id = 0; id < 256; id++) { |
2266 | if(is->reset->rs[id]) { | 2266 | if (is->reset->rs[id]) { |
2267 | isdn_ppp_ccp_reset_free_state(is, (unsigned char)id); | 2267 | isdn_ppp_ccp_reset_free_state(is, (unsigned char)id); |
2268 | } | 2268 | } |
2269 | } | 2269 | } |
@@ -2277,11 +2277,11 @@ static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is, | |||
2277 | { | 2277 | { |
2278 | struct ippp_ccp_reset_state *rs; | 2278 | struct ippp_ccp_reset_state *rs; |
2279 | 2279 | ||
2280 | if(is->reset->rs[id]) { | 2280 | if (is->reset->rs[id]) { |
2281 | printk(KERN_DEBUG "ippp_ccp: freeing state for id %d\n", id); | 2281 | printk(KERN_DEBUG "ippp_ccp: freeing state for id %d\n", id); |
2282 | rs = is->reset->rs[id]; | 2282 | rs = is->reset->rs[id]; |
2283 | /* Make sure the kernel will not call back later */ | 2283 | /* Make sure the kernel will not call back later */ |
2284 | if(rs->ta) | 2284 | if (rs->ta) |
2285 | del_timer(&rs->timer); | 2285 | del_timer(&rs->timer); |
2286 | is->reset->rs[id] = NULL; | 2286 | is->reset->rs[id] = NULL; |
2287 | kfree(rs); | 2287 | kfree(rs); |
@@ -2297,13 +2297,13 @@ static void isdn_ppp_ccp_timer_callback(unsigned long closure) | |||
2297 | struct ippp_ccp_reset_state *rs = | 2297 | struct ippp_ccp_reset_state *rs = |
2298 | (struct ippp_ccp_reset_state *)closure; | 2298 | (struct ippp_ccp_reset_state *)closure; |
2299 | 2299 | ||
2300 | if(!rs) { | 2300 | if (!rs) { |
2301 | printk(KERN_ERR "ippp_ccp: timer cb with zero closure.\n"); | 2301 | printk(KERN_ERR "ippp_ccp: timer cb with zero closure.\n"); |
2302 | return; | 2302 | return; |
2303 | } | 2303 | } |
2304 | if(rs->ta && rs->state == CCPResetSentReq) { | 2304 | if (rs->ta && rs->state == CCPResetSentReq) { |
2305 | /* We are correct here */ | 2305 | /* We are correct here */ |
2306 | if(!rs->expra) { | 2306 | if (!rs->expra) { |
2307 | /* Hmm, there is no Ack really expected. We can clean | 2307 | /* Hmm, there is no Ack really expected. We can clean |
2308 | up the state now, it will be reallocated if the | 2308 | up the state now, it will be reallocated if the |
2309 | decompressor insists on another reset */ | 2309 | decompressor insists on another reset */ |
@@ -2317,7 +2317,7 @@ static void isdn_ppp_ccp_timer_callback(unsigned long closure) | |||
2317 | isdn_ppp_ccp_xmit_reset(rs->is, PPP_CCP, CCP_RESETREQ, rs->id, | 2317 | isdn_ppp_ccp_xmit_reset(rs->is, PPP_CCP, CCP_RESETREQ, rs->id, |
2318 | rs->data, rs->dlen); | 2318 | rs->data, rs->dlen); |
2319 | /* Restart timer */ | 2319 | /* Restart timer */ |
2320 | rs->timer.expires = jiffies + HZ*5; | 2320 | rs->timer.expires = jiffies + HZ * 5; |
2321 | add_timer(&rs->timer); | 2321 | add_timer(&rs->timer); |
2322 | } else { | 2322 | } else { |
2323 | printk(KERN_WARNING "ippp_ccp: timer cb in wrong state %d\n", | 2323 | printk(KERN_WARNING "ippp_ccp: timer cb in wrong state %d\n", |
@@ -2327,16 +2327,16 @@ static void isdn_ppp_ccp_timer_callback(unsigned long closure) | |||
2327 | 2327 | ||
2328 | /* Allocate a new reset transaction state */ | 2328 | /* Allocate a new reset transaction state */ |
2329 | static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is, | 2329 | static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is, |
2330 | unsigned char id) | 2330 | unsigned char id) |
2331 | { | 2331 | { |
2332 | struct ippp_ccp_reset_state *rs; | 2332 | struct ippp_ccp_reset_state *rs; |
2333 | if(is->reset->rs[id]) { | 2333 | if (is->reset->rs[id]) { |
2334 | printk(KERN_WARNING "ippp_ccp: old state exists for id %d\n", | 2334 | printk(KERN_WARNING "ippp_ccp: old state exists for id %d\n", |
2335 | id); | 2335 | id); |
2336 | return NULL; | 2336 | return NULL; |
2337 | } else { | 2337 | } else { |
2338 | rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_KERNEL); | 2338 | rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_KERNEL); |
2339 | if(!rs) | 2339 | if (!rs) |
2340 | return NULL; | 2340 | return NULL; |
2341 | rs->state = CCPResetIdle; | 2341 | rs->state = CCPResetIdle; |
2342 | rs->is = is; | 2342 | rs->is = is; |
@@ -2357,21 +2357,21 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | |||
2357 | { | 2357 | { |
2358 | struct ippp_ccp_reset_state *rs; | 2358 | struct ippp_ccp_reset_state *rs; |
2359 | 2359 | ||
2360 | if(rp->valid) { | 2360 | if (rp->valid) { |
2361 | /* The decompressor defines parameters by itself */ | 2361 | /* The decompressor defines parameters by itself */ |
2362 | if(rp->rsend) { | 2362 | if (rp->rsend) { |
2363 | /* And he wants us to send a request */ | 2363 | /* And he wants us to send a request */ |
2364 | if(!(rp->idval)) { | 2364 | if (!(rp->idval)) { |
2365 | printk(KERN_ERR "ippp_ccp: decompressor must" | 2365 | printk(KERN_ERR "ippp_ccp: decompressor must" |
2366 | " specify reset id\n"); | 2366 | " specify reset id\n"); |
2367 | return; | 2367 | return; |
2368 | } | 2368 | } |
2369 | if(is->reset->rs[rp->id]) { | 2369 | if (is->reset->rs[rp->id]) { |
2370 | /* There is already a transaction in existence | 2370 | /* There is already a transaction in existence |
2371 | for this id. May be still waiting for a | 2371 | for this id. May be still waiting for a |
2372 | Ack or may be wrong. */ | 2372 | Ack or may be wrong. */ |
2373 | rs = is->reset->rs[rp->id]; | 2373 | rs = is->reset->rs[rp->id]; |
2374 | if(rs->state == CCPResetSentReq && rs->ta) { | 2374 | if (rs->state == CCPResetSentReq && rs->ta) { |
2375 | printk(KERN_DEBUG "ippp_ccp: reset" | 2375 | printk(KERN_DEBUG "ippp_ccp: reset" |
2376 | " trans still in progress" | 2376 | " trans still in progress" |
2377 | " for id %d\n", rp->id); | 2377 | " for id %d\n", rp->id); |
@@ -2385,14 +2385,14 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | |||
2385 | printk(KERN_DEBUG "ippp_ccp: new trans for id" | 2385 | printk(KERN_DEBUG "ippp_ccp: new trans for id" |
2386 | " %d to be started\n", rp->id); | 2386 | " %d to be started\n", rp->id); |
2387 | rs = isdn_ppp_ccp_reset_alloc_state(is, rp->id); | 2387 | rs = isdn_ppp_ccp_reset_alloc_state(is, rp->id); |
2388 | if(!rs) { | 2388 | if (!rs) { |
2389 | printk(KERN_ERR "ippp_ccp: out of mem" | 2389 | printk(KERN_ERR "ippp_ccp: out of mem" |
2390 | " allocing ccp trans\n"); | 2390 | " allocing ccp trans\n"); |
2391 | return; | 2391 | return; |
2392 | } | 2392 | } |
2393 | rs->state = CCPResetSentReq; | 2393 | rs->state = CCPResetSentReq; |
2394 | rs->expra = rp->expra; | 2394 | rs->expra = rp->expra; |
2395 | if(rp->dtval) { | 2395 | if (rp->dtval) { |
2396 | rs->dlen = rp->dlen; | 2396 | rs->dlen = rp->dlen; |
2397 | memcpy(rs->data, rp->data, rp->dlen); | 2397 | memcpy(rs->data, rp->data, rp->dlen); |
2398 | } | 2398 | } |
@@ -2401,7 +2401,7 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | |||
2401 | CCP_RESETREQ, rs->id, | 2401 | CCP_RESETREQ, rs->id, |
2402 | rs->data, rs->dlen); | 2402 | rs->data, rs->dlen); |
2403 | /* Start the timer */ | 2403 | /* Start the timer */ |
2404 | rs->timer.expires = jiffies + 5*HZ; | 2404 | rs->timer.expires = jiffies + 5 * HZ; |
2405 | add_timer(&rs->timer); | 2405 | add_timer(&rs->timer); |
2406 | rs->ta = 1; | 2406 | rs->ta = 1; |
2407 | } | 2407 | } |
@@ -2413,12 +2413,12 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | |||
2413 | care about them, so we just send the minimal requests | 2413 | care about them, so we just send the minimal requests |
2414 | and increase ids only when an Ack is received for a | 2414 | and increase ids only when an Ack is received for a |
2415 | given id */ | 2415 | given id */ |
2416 | if(is->reset->rs[is->reset->lastid]) { | 2416 | if (is->reset->rs[is->reset->lastid]) { |
2417 | /* There is already a transaction in existence | 2417 | /* There is already a transaction in existence |
2418 | for this id. May be still waiting for a | 2418 | for this id. May be still waiting for a |
2419 | Ack or may be wrong. */ | 2419 | Ack or may be wrong. */ |
2420 | rs = is->reset->rs[is->reset->lastid]; | 2420 | rs = is->reset->rs[is->reset->lastid]; |
2421 | if(rs->state == CCPResetSentReq && rs->ta) { | 2421 | if (rs->state == CCPResetSentReq && rs->ta) { |
2422 | printk(KERN_DEBUG "ippp_ccp: reset" | 2422 | printk(KERN_DEBUG "ippp_ccp: reset" |
2423 | " trans still in progress" | 2423 | " trans still in progress" |
2424 | " for id %d\n", rp->id); | 2424 | " for id %d\n", rp->id); |
@@ -2432,7 +2432,7 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | |||
2432 | " %d to be started\n", is->reset->lastid); | 2432 | " %d to be started\n", is->reset->lastid); |
2433 | rs = isdn_ppp_ccp_reset_alloc_state(is, | 2433 | rs = isdn_ppp_ccp_reset_alloc_state(is, |
2434 | is->reset->lastid); | 2434 | is->reset->lastid); |
2435 | if(!rs) { | 2435 | if (!rs) { |
2436 | printk(KERN_ERR "ippp_ccp: out of mem" | 2436 | printk(KERN_ERR "ippp_ccp: out of mem" |
2437 | " allocing ccp trans\n"); | 2437 | " allocing ccp trans\n"); |
2438 | return; | 2438 | return; |
@@ -2446,7 +2446,7 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, | |||
2446 | isdn_ppp_ccp_xmit_reset(is, PPP_CCP, CCP_RESETREQ, | 2446 | isdn_ppp_ccp_xmit_reset(is, PPP_CCP, CCP_RESETREQ, |
2447 | rs->id, NULL, 0); | 2447 | rs->id, NULL, 0); |
2448 | /* Start the timer */ | 2448 | /* Start the timer */ |
2449 | rs->timer.expires = jiffies + 5*HZ; | 2449 | rs->timer.expires = jiffies + 5 * HZ; |
2450 | add_timer(&rs->timer); | 2450 | add_timer(&rs->timer); |
2451 | rs->ta = 1; | 2451 | rs->ta = 1; |
2452 | } | 2452 | } |
@@ -2460,17 +2460,17 @@ static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, | |||
2460 | { | 2460 | { |
2461 | struct ippp_ccp_reset_state *rs = is->reset->rs[id]; | 2461 | struct ippp_ccp_reset_state *rs = is->reset->rs[id]; |
2462 | 2462 | ||
2463 | if(rs) { | 2463 | if (rs) { |
2464 | if(rs->ta && rs->state == CCPResetSentReq) { | 2464 | if (rs->ta && rs->state == CCPResetSentReq) { |
2465 | /* Great, we are correct */ | 2465 | /* Great, we are correct */ |
2466 | if(!rs->expra) | 2466 | if (!rs->expra) |
2467 | printk(KERN_DEBUG "ippp_ccp: ResetAck received" | 2467 | printk(KERN_DEBUG "ippp_ccp: ResetAck received" |
2468 | " for id %d but not expected\n", id); | 2468 | " for id %d but not expected\n", id); |
2469 | } else { | 2469 | } else { |
2470 | printk(KERN_INFO "ippp_ccp: ResetAck received out of" | 2470 | printk(KERN_INFO "ippp_ccp: ResetAck received out of" |
2471 | "sync for id %d\n", id); | 2471 | "sync for id %d\n", id); |
2472 | } | 2472 | } |
2473 | if(rs->ta) { | 2473 | if (rs->ta) { |
2474 | rs->ta = 0; | 2474 | rs->ta = 0; |
2475 | del_timer(&rs->timer); | 2475 | del_timer(&rs->timer); |
2476 | } | 2476 | } |
@@ -2483,7 +2483,7 @@ static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, | |||
2483 | is->reset->lastid++; | 2483 | is->reset->lastid++; |
2484 | } | 2484 | } |
2485 | 2485 | ||
2486 | /* | 2486 | /* |
2487 | * decompress packet | 2487 | * decompress packet |
2488 | * | 2488 | * |
2489 | * if master = 0, we're trying to uncompress an per-link compressed packet, | 2489 | * if master = 0, we're trying to uncompress an per-link compressed packet, |
@@ -2495,8 +2495,8 @@ static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, | |||
2495 | * NULL if decompression error | 2495 | * NULL if decompression error |
2496 | */ | 2496 | */ |
2497 | 2497 | ||
2498 | static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struct *is,struct ippp_struct *master, | 2498 | static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb, struct ippp_struct *is, struct ippp_struct *master, |
2499 | int *proto) | 2499 | int *proto) |
2500 | { | 2500 | { |
2501 | void *stat = NULL; | 2501 | void *stat = NULL; |
2502 | struct isdn_ppp_compressor *ipc = NULL; | 2502 | struct isdn_ppp_compressor *ipc = NULL; |
@@ -2506,8 +2506,8 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc | |||
2506 | struct isdn_ppp_resetparams rsparm; | 2506 | struct isdn_ppp_resetparams rsparm; |
2507 | unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; | 2507 | unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; |
2508 | 2508 | ||
2509 | if(!master) { | 2509 | if (!master) { |
2510 | // per-link decompression | 2510 | // per-link decompression |
2511 | stat = is->link_decomp_stat; | 2511 | stat = is->link_decomp_stat; |
2512 | ipc = is->link_decompressor; | 2512 | ipc = is->link_decompressor; |
2513 | ri = is; | 2513 | ri = is; |
@@ -2524,28 +2524,28 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc | |||
2524 | } | 2524 | } |
2525 | BUG_ON(!stat); // if we have a compressor, stat has been set as well | 2525 | BUG_ON(!stat); // if we have a compressor, stat has been set as well |
2526 | 2526 | ||
2527 | if((master && *proto == PPP_COMP) || (!master && *proto == PPP_COMPFRAG) ) { | 2527 | if ((master && *proto == PPP_COMP) || (!master && *proto == PPP_COMPFRAG)) { |
2528 | // compressed packets are compressed by their protocol type | 2528 | // compressed packets are compressed by their protocol type |
2529 | 2529 | ||
2530 | // Set up reset params for the decompressor | 2530 | // Set up reset params for the decompressor |
2531 | memset(&rsparm, 0, sizeof(rsparm)); | 2531 | memset(&rsparm, 0, sizeof(rsparm)); |
2532 | rsparm.data = rsdata; | 2532 | rsparm.data = rsdata; |
2533 | rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; | 2533 | rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; |
2534 | 2534 | ||
2535 | skb_out = dev_alloc_skb(is->mru + PPP_HDRLEN); | 2535 | skb_out = dev_alloc_skb(is->mru + PPP_HDRLEN); |
2536 | if (!skb_out) { | 2536 | if (!skb_out) { |
2537 | kfree_skb(skb); | 2537 | kfree_skb(skb); |
2538 | printk(KERN_ERR "ippp: decomp memory allocation failure\n"); | 2538 | printk(KERN_ERR "ippp: decomp memory allocation failure\n"); |
2539 | return NULL; | 2539 | return NULL; |
2540 | } | 2540 | } |
2541 | len = ipc->decompress(stat, skb, skb_out, &rsparm); | 2541 | len = ipc->decompress(stat, skb, skb_out, &rsparm); |
2542 | kfree_skb(skb); | 2542 | kfree_skb(skb); |
2543 | if (len <= 0) { | 2543 | if (len <= 0) { |
2544 | switch(len) { | 2544 | switch (len) { |
2545 | case DECOMP_ERROR: | 2545 | case DECOMP_ERROR: |
2546 | printk(KERN_INFO "ippp: decomp wants reset %s params\n", | 2546 | printk(KERN_INFO "ippp: decomp wants reset %s params\n", |
2547 | rsparm.valid ? "with" : "without"); | 2547 | rsparm.valid ? "with" : "without"); |
2548 | 2548 | ||
2549 | isdn_ppp_ccp_reset_trans(ri, &rsparm); | 2549 | isdn_ppp_ccp_reset_trans(ri, &rsparm); |
2550 | break; | 2550 | break; |
2551 | case DECOMP_FATALERROR: | 2551 | case DECOMP_FATALERROR: |
@@ -2563,7 +2563,7 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc | |||
2563 | return NULL; | 2563 | return NULL; |
2564 | } | 2564 | } |
2565 | return skb_out; | 2565 | return skb_out; |
2566 | } else { | 2566 | } else { |
2567 | // uncompressed packets are fed through the decompressor to | 2567 | // uncompressed packets are fed through the decompressor to |
2568 | // update the decompressor state | 2568 | // update the decompressor state |
2569 | ipc->incomp(stat, skb, *proto); | 2569 | ipc->incomp(stat, skb, *proto); |
@@ -2572,31 +2572,31 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc | |||
2572 | } | 2572 | } |
2573 | 2573 | ||
2574 | /* | 2574 | /* |
2575 | * compress a frame | 2575 | * compress a frame |
2576 | * type=0: normal/bundle compression | 2576 | * type=0: normal/bundle compression |
2577 | * =1: link compression | 2577 | * =1: link compression |
2578 | * returns original skb if we haven't compressed the frame | 2578 | * returns original skb if we haven't compressed the frame |
2579 | * and a new skb pointer if we've done it | 2579 | * and a new skb pointer if we've done it |
2580 | */ | 2580 | */ |
2581 | static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in,int *proto, | 2581 | static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in, int *proto, |
2582 | struct ippp_struct *is,struct ippp_struct *master,int type) | 2582 | struct ippp_struct *is, struct ippp_struct *master, int type) |
2583 | { | 2583 | { |
2584 | int ret; | 2584 | int ret; |
2585 | int new_proto; | 2585 | int new_proto; |
2586 | struct isdn_ppp_compressor *compressor; | 2586 | struct isdn_ppp_compressor *compressor; |
2587 | void *stat; | 2587 | void *stat; |
2588 | struct sk_buff *skb_out; | 2588 | struct sk_buff *skb_out; |
2589 | 2589 | ||
2590 | /* we do not compress control protocols */ | 2590 | /* we do not compress control protocols */ |
2591 | if(*proto < 0 || *proto > 0x3fff) { | 2591 | if (*proto < 0 || *proto > 0x3fff) { |
2592 | return skb_in; | 2592 | return skb_in; |
2593 | } | 2593 | } |
2594 | 2594 | ||
2595 | if(type) { /* type=1 => Link compression */ | 2595 | if (type) { /* type=1 => Link compression */ |
2596 | return skb_in; | 2596 | return skb_in; |
2597 | } | 2597 | } |
2598 | else { | 2598 | else { |
2599 | if(!master) { | 2599 | if (!master) { |
2600 | compressor = is->compressor; | 2600 | compressor = is->compressor; |
2601 | stat = is->comp_stat; | 2601 | stat = is->comp_stat; |
2602 | } | 2602 | } |
@@ -2607,90 +2607,90 @@ static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in,int *proto, | |||
2607 | new_proto = PPP_COMP; | 2607 | new_proto = PPP_COMP; |
2608 | } | 2608 | } |
2609 | 2609 | ||
2610 | if(!compressor) { | 2610 | if (!compressor) { |
2611 | printk(KERN_ERR "isdn_ppp: No compressor set!\n"); | 2611 | printk(KERN_ERR "isdn_ppp: No compressor set!\n"); |
2612 | return skb_in; | 2612 | return skb_in; |
2613 | } | 2613 | } |
2614 | if(!stat) { | 2614 | if (!stat) { |
2615 | printk(KERN_ERR "isdn_ppp: Compressor not initialized?\n"); | 2615 | printk(KERN_ERR "isdn_ppp: Compressor not initialized?\n"); |
2616 | return skb_in; | 2616 | return skb_in; |
2617 | } | 2617 | } |
2618 | 2618 | ||
2619 | /* Allow for at least 150 % expansion (for now) */ | 2619 | /* Allow for at least 150 % expansion (for now) */ |
2620 | skb_out = alloc_skb(skb_in->len + skb_in->len/2 + 32 + | 2620 | skb_out = alloc_skb(skb_in->len + skb_in->len / 2 + 32 + |
2621 | skb_headroom(skb_in), GFP_ATOMIC); | 2621 | skb_headroom(skb_in), GFP_ATOMIC); |
2622 | if(!skb_out) | 2622 | if (!skb_out) |
2623 | return skb_in; | 2623 | return skb_in; |
2624 | skb_reserve(skb_out, skb_headroom(skb_in)); | 2624 | skb_reserve(skb_out, skb_headroom(skb_in)); |
2625 | 2625 | ||
2626 | ret = (compressor->compress)(stat,skb_in,skb_out,*proto); | 2626 | ret = (compressor->compress)(stat, skb_in, skb_out, *proto); |
2627 | if(!ret) { | 2627 | if (!ret) { |
2628 | dev_kfree_skb(skb_out); | 2628 | dev_kfree_skb(skb_out); |
2629 | return skb_in; | 2629 | return skb_in; |
2630 | } | 2630 | } |
2631 | 2631 | ||
2632 | dev_kfree_skb(skb_in); | 2632 | dev_kfree_skb(skb_in); |
2633 | *proto = new_proto; | 2633 | *proto = new_proto; |
2634 | return skb_out; | 2634 | return skb_out; |
2635 | } | 2635 | } |
2636 | 2636 | ||
2637 | /* | 2637 | /* |
2638 | * we received a CCP frame .. | 2638 | * we received a CCP frame .. |
2639 | * not a clean solution, but we MUST handle a few cases in the kernel | 2639 | * not a clean solution, but we MUST handle a few cases in the kernel |
2640 | */ | 2640 | */ |
2641 | static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | 2641 | static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, |
2642 | struct sk_buff *skb,int proto) | 2642 | struct sk_buff *skb, int proto) |
2643 | { | 2643 | { |
2644 | struct ippp_struct *is; | 2644 | struct ippp_struct *is; |
2645 | struct ippp_struct *mis; | 2645 | struct ippp_struct *mis; |
2646 | int len; | 2646 | int len; |
2647 | struct isdn_ppp_resetparams rsparm; | 2647 | struct isdn_ppp_resetparams rsparm; |
2648 | unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; | 2648 | unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; |
2649 | 2649 | ||
2650 | printk(KERN_DEBUG "Received CCP frame from peer slot(%d)\n", | 2650 | printk(KERN_DEBUG "Received CCP frame from peer slot(%d)\n", |
2651 | lp->ppp_slot); | 2651 | lp->ppp_slot); |
2652 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | 2652 | if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { |
2653 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", | 2653 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", |
2654 | __func__, lp->ppp_slot); | 2654 | __func__, lp->ppp_slot); |
2655 | return; | 2655 | return; |
2656 | } | 2656 | } |
2657 | is = ippp_table[lp->ppp_slot]; | 2657 | is = ippp_table[lp->ppp_slot]; |
2658 | isdn_ppp_frame_log("ccp-rcv", skb->data, skb->len, 32, is->unit,lp->ppp_slot); | 2658 | isdn_ppp_frame_log("ccp-rcv", skb->data, skb->len, 32, is->unit, lp->ppp_slot); |
2659 | 2659 | ||
2660 | if(lp->master) { | 2660 | if (lp->master) { |
2661 | int slot = ISDN_MASTER_PRIV(lp)->ppp_slot; | 2661 | int slot = ISDN_MASTER_PRIV(lp)->ppp_slot; |
2662 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 2662 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
2663 | printk(KERN_ERR "%s: slot(%d) out of range\n", | 2663 | printk(KERN_ERR "%s: slot(%d) out of range\n", |
2664 | __func__, slot); | 2664 | __func__, slot); |
2665 | return; | 2665 | return; |
2666 | } | 2666 | } |
2667 | mis = ippp_table[slot]; | 2667 | mis = ippp_table[slot]; |
2668 | } else | 2668 | } else |
2669 | mis = is; | 2669 | mis = is; |
2670 | 2670 | ||
2671 | switch(skb->data[0]) { | 2671 | switch (skb->data[0]) { |
2672 | case CCP_CONFREQ: | 2672 | case CCP_CONFREQ: |
2673 | if(is->debug & 0x10) | 2673 | if (is->debug & 0x10) |
2674 | printk(KERN_DEBUG "Disable compression here!\n"); | 2674 | printk(KERN_DEBUG "Disable compression here!\n"); |
2675 | if(proto == PPP_CCP) | 2675 | if (proto == PPP_CCP) |
2676 | mis->compflags &= ~SC_COMP_ON; | 2676 | mis->compflags &= ~SC_COMP_ON; |
2677 | else | 2677 | else |
2678 | is->compflags &= ~SC_LINK_COMP_ON; | 2678 | is->compflags &= ~SC_LINK_COMP_ON; |
2679 | break; | 2679 | break; |
2680 | case CCP_TERMREQ: | 2680 | case CCP_TERMREQ: |
2681 | case CCP_TERMACK: | 2681 | case CCP_TERMACK: |
2682 | if(is->debug & 0x10) | 2682 | if (is->debug & 0x10) |
2683 | printk(KERN_DEBUG "Disable (de)compression here!\n"); | 2683 | printk(KERN_DEBUG "Disable (de)compression here!\n"); |
2684 | if(proto == PPP_CCP) | 2684 | if (proto == PPP_CCP) |
2685 | mis->compflags &= ~(SC_DECOMP_ON|SC_COMP_ON); | 2685 | mis->compflags &= ~(SC_DECOMP_ON | SC_COMP_ON); |
2686 | else | 2686 | else |
2687 | is->compflags &= ~(SC_LINK_DECOMP_ON|SC_LINK_COMP_ON); | 2687 | is->compflags &= ~(SC_LINK_DECOMP_ON | SC_LINK_COMP_ON); |
2688 | break; | 2688 | break; |
2689 | case CCP_CONFACK: | 2689 | case CCP_CONFACK: |
2690 | /* if we RECEIVE an ackowledge we enable the decompressor */ | 2690 | /* if we RECEIVE an ackowledge we enable the decompressor */ |
2691 | if(is->debug & 0x10) | 2691 | if (is->debug & 0x10) |
2692 | printk(KERN_DEBUG "Enable decompression here!\n"); | 2692 | printk(KERN_DEBUG "Enable decompression here!\n"); |
2693 | if(proto == PPP_CCP) { | 2693 | if (proto == PPP_CCP) { |
2694 | if (!mis->decompressor) | 2694 | if (!mis->decompressor) |
2695 | break; | 2695 | break; |
2696 | mis->compflags |= SC_DECOMP_ON; | 2696 | mis->compflags |= SC_DECOMP_ON; |
@@ -2706,11 +2706,11 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | |||
2706 | len = (skb->data[2] << 8) | skb->data[3]; | 2706 | len = (skb->data[2] << 8) | skb->data[3]; |
2707 | len -= 4; | 2707 | len -= 4; |
2708 | 2708 | ||
2709 | if(proto == PPP_CCP) { | 2709 | if (proto == PPP_CCP) { |
2710 | /* If a reset Ack was outstanding for this id, then | 2710 | /* If a reset Ack was outstanding for this id, then |
2711 | clean up the state engine */ | 2711 | clean up the state engine */ |
2712 | isdn_ppp_ccp_reset_ack_rcvd(mis, skb->data[1]); | 2712 | isdn_ppp_ccp_reset_ack_rcvd(mis, skb->data[1]); |
2713 | if(mis->decompressor && mis->decomp_stat) | 2713 | if (mis->decompressor && mis->decomp_stat) |
2714 | mis->decompressor-> | 2714 | mis->decompressor-> |
2715 | reset(mis->decomp_stat, | 2715 | reset(mis->decomp_stat, |
2716 | skb->data[0], | 2716 | skb->data[0], |
@@ -2722,7 +2722,7 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | |||
2722 | } | 2722 | } |
2723 | else { | 2723 | else { |
2724 | isdn_ppp_ccp_reset_ack_rcvd(is, skb->data[1]); | 2724 | isdn_ppp_ccp_reset_ack_rcvd(is, skb->data[1]); |
2725 | if(is->link_decompressor && is->link_decomp_stat) | 2725 | if (is->link_decompressor && is->link_decomp_stat) |
2726 | is->link_decompressor-> | 2726 | is->link_decompressor-> |
2727 | reset(is->link_decomp_stat, | 2727 | reset(is->link_decomp_stat, |
2728 | skb->data[0], | 2728 | skb->data[0], |
@@ -2740,12 +2740,12 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | |||
2740 | /* Set up reset params for the reset entry */ | 2740 | /* Set up reset params for the reset entry */ |
2741 | memset(&rsparm, 0, sizeof(rsparm)); | 2741 | memset(&rsparm, 0, sizeof(rsparm)); |
2742 | rsparm.data = rsdata; | 2742 | rsparm.data = rsdata; |
2743 | rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; | 2743 | rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; |
2744 | /* Isolate data length */ | 2744 | /* Isolate data length */ |
2745 | len = (skb->data[2] << 8) | skb->data[3]; | 2745 | len = (skb->data[2] << 8) | skb->data[3]; |
2746 | len -= 4; | 2746 | len -= 4; |
2747 | if(proto == PPP_CCP) { | 2747 | if (proto == PPP_CCP) { |
2748 | if(mis->compressor && mis->comp_stat) | 2748 | if (mis->compressor && mis->comp_stat) |
2749 | mis->compressor-> | 2749 | mis->compressor-> |
2750 | reset(mis->comp_stat, | 2750 | reset(mis->comp_stat, |
2751 | skb->data[0], | 2751 | skb->data[0], |
@@ -2754,7 +2754,7 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | |||
2754 | len, &rsparm); | 2754 | len, &rsparm); |
2755 | } | 2755 | } |
2756 | else { | 2756 | else { |
2757 | if(is->link_compressor && is->link_comp_stat) | 2757 | if (is->link_compressor && is->link_comp_stat) |
2758 | is->link_compressor-> | 2758 | is->link_compressor-> |
2759 | reset(is->link_comp_stat, | 2759 | reset(is->link_comp_stat, |
2760 | skb->data[0], | 2760 | skb->data[0], |
@@ -2763,9 +2763,9 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | |||
2763 | len, &rsparm); | 2763 | len, &rsparm); |
2764 | } | 2764 | } |
2765 | /* Ack the Req as specified by rsparm */ | 2765 | /* Ack the Req as specified by rsparm */ |
2766 | if(rsparm.valid) { | 2766 | if (rsparm.valid) { |
2767 | /* Compressor reset handler decided how to answer */ | 2767 | /* Compressor reset handler decided how to answer */ |
2768 | if(rsparm.rsend) { | 2768 | if (rsparm.rsend) { |
2769 | /* We should send a Frame */ | 2769 | /* We should send a Frame */ |
2770 | isdn_ppp_ccp_xmit_reset(is, proto, CCP_RESETACK, | 2770 | isdn_ppp_ccp_xmit_reset(is, proto, CCP_RESETACK, |
2771 | rsparm.idval ? rsparm.id | 2771 | rsparm.idval ? rsparm.id |
@@ -2817,69 +2817,69 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, | |||
2817 | 2817 | ||
2818 | static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb) | 2818 | static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb) |
2819 | { | 2819 | { |
2820 | struct ippp_struct *mis,*is; | 2820 | struct ippp_struct *mis, *is; |
2821 | int proto, slot = lp->ppp_slot; | 2821 | int proto, slot = lp->ppp_slot; |
2822 | unsigned char *data; | 2822 | unsigned char *data; |
2823 | 2823 | ||
2824 | if(!skb || skb->len < 3) | 2824 | if (!skb || skb->len < 3) |
2825 | return; | 2825 | return; |
2826 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 2826 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
2827 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", | 2827 | printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", |
2828 | __func__, slot); | 2828 | __func__, slot); |
2829 | return; | 2829 | return; |
2830 | } | 2830 | } |
2831 | is = ippp_table[slot]; | 2831 | is = ippp_table[slot]; |
2832 | /* Daemon may send with or without address and control field comp */ | 2832 | /* Daemon may send with or without address and control field comp */ |
2833 | data = skb->data; | 2833 | data = skb->data; |
2834 | if(!(is->pppcfg & SC_COMP_AC) && data[0] == 0xff && data[1] == 0x03) { | 2834 | if (!(is->pppcfg & SC_COMP_AC) && data[0] == 0xff && data[1] == 0x03) { |
2835 | data += 2; | 2835 | data += 2; |
2836 | if(skb->len < 5) | 2836 | if (skb->len < 5) |
2837 | return; | 2837 | return; |
2838 | } | 2838 | } |
2839 | 2839 | ||
2840 | proto = ((int)data[0]<<8)+data[1]; | 2840 | proto = ((int)data[0]<<8) + data[1]; |
2841 | if(proto != PPP_CCP && proto != PPP_CCPFRAG) | 2841 | if (proto != PPP_CCP && proto != PPP_CCPFRAG) |
2842 | return; | 2842 | return; |
2843 | 2843 | ||
2844 | printk(KERN_DEBUG "Received CCP frame from daemon:\n"); | 2844 | printk(KERN_DEBUG "Received CCP frame from daemon:\n"); |
2845 | isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot); | 2845 | isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot); |
2846 | 2846 | ||
2847 | if (lp->master) { | 2847 | if (lp->master) { |
2848 | slot = ISDN_MASTER_PRIV(lp)->ppp_slot; | 2848 | slot = ISDN_MASTER_PRIV(lp)->ppp_slot; |
2849 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 2849 | if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { |
2850 | printk(KERN_ERR "%s: slot(%d) out of range\n", | 2850 | printk(KERN_ERR "%s: slot(%d) out of range\n", |
2851 | __func__, slot); | 2851 | __func__, slot); |
2852 | return; | 2852 | return; |
2853 | } | 2853 | } |
2854 | mis = ippp_table[slot]; | 2854 | mis = ippp_table[slot]; |
2855 | } else | 2855 | } else |
2856 | mis = is; | 2856 | mis = is; |
2857 | if (mis != is) | 2857 | if (mis != is) |
2858 | printk(KERN_DEBUG "isdn_ppp: Ouch! Master CCP sends on slave slot!\n"); | 2858 | printk(KERN_DEBUG "isdn_ppp: Ouch! Master CCP sends on slave slot!\n"); |
2859 | 2859 | ||
2860 | switch(data[2]) { | 2860 | switch (data[2]) { |
2861 | case CCP_CONFREQ: | 2861 | case CCP_CONFREQ: |
2862 | if(is->debug & 0x10) | 2862 | if (is->debug & 0x10) |
2863 | printk(KERN_DEBUG "Disable decompression here!\n"); | 2863 | printk(KERN_DEBUG "Disable decompression here!\n"); |
2864 | if(proto == PPP_CCP) | 2864 | if (proto == PPP_CCP) |
2865 | is->compflags &= ~SC_DECOMP_ON; | 2865 | is->compflags &= ~SC_DECOMP_ON; |
2866 | else | 2866 | else |
2867 | is->compflags &= ~SC_LINK_DECOMP_ON; | 2867 | is->compflags &= ~SC_LINK_DECOMP_ON; |
2868 | break; | 2868 | break; |
2869 | case CCP_TERMREQ: | 2869 | case CCP_TERMREQ: |
2870 | case CCP_TERMACK: | 2870 | case CCP_TERMACK: |
2871 | if(is->debug & 0x10) | 2871 | if (is->debug & 0x10) |
2872 | printk(KERN_DEBUG "Disable (de)compression here!\n"); | 2872 | printk(KERN_DEBUG "Disable (de)compression here!\n"); |
2873 | if(proto == PPP_CCP) | 2873 | if (proto == PPP_CCP) |
2874 | is->compflags &= ~(SC_DECOMP_ON|SC_COMP_ON); | 2874 | is->compflags &= ~(SC_DECOMP_ON | SC_COMP_ON); |
2875 | else | 2875 | else |
2876 | is->compflags &= ~(SC_LINK_DECOMP_ON|SC_LINK_COMP_ON); | 2876 | is->compflags &= ~(SC_LINK_DECOMP_ON | SC_LINK_COMP_ON); |
2877 | break; | 2877 | break; |
2878 | case CCP_CONFACK: | 2878 | case CCP_CONFACK: |
2879 | /* if we SEND an ackowledge we can/must enable the compressor */ | 2879 | /* if we SEND an ackowledge we can/must enable the compressor */ |
2880 | if(is->debug & 0x10) | 2880 | if (is->debug & 0x10) |
2881 | printk(KERN_DEBUG "Enable compression here!\n"); | 2881 | printk(KERN_DEBUG "Enable compression here!\n"); |
2882 | if(proto == PPP_CCP) { | 2882 | if (proto == PPP_CCP) { |
2883 | if (!is->compressor) | 2883 | if (!is->compressor) |
2884 | break; | 2884 | break; |
2885 | is->compflags |= SC_COMP_ON; | 2885 | is->compflags |= SC_COMP_ON; |
@@ -2891,21 +2891,21 @@ static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, struct | |||
2891 | break; | 2891 | break; |
2892 | case CCP_RESETACK: | 2892 | case CCP_RESETACK: |
2893 | /* If we send a ACK we should reset our compressor */ | 2893 | /* If we send a ACK we should reset our compressor */ |
2894 | if(is->debug & 0x10) | 2894 | if (is->debug & 0x10) |
2895 | printk(KERN_DEBUG "Reset decompression state here!\n"); | 2895 | printk(KERN_DEBUG "Reset decompression state here!\n"); |
2896 | printk(KERN_DEBUG "ResetAck from daemon passed by\n"); | 2896 | printk(KERN_DEBUG "ResetAck from daemon passed by\n"); |
2897 | if(proto == PPP_CCP) { | 2897 | if (proto == PPP_CCP) { |
2898 | /* link to master? */ | 2898 | /* link to master? */ |
2899 | if(is->compressor && is->comp_stat) | 2899 | if (is->compressor && is->comp_stat) |
2900 | is->compressor->reset(is->comp_stat, 0, 0, | 2900 | is->compressor->reset(is->comp_stat, 0, 0, |
2901 | NULL, 0, NULL); | 2901 | NULL, 0, NULL); |
2902 | is->compflags &= ~SC_COMP_DISCARD; | 2902 | is->compflags &= ~SC_COMP_DISCARD; |
2903 | } | 2903 | } |
2904 | else { | 2904 | else { |
2905 | if(is->link_compressor && is->link_comp_stat) | 2905 | if (is->link_compressor && is->link_comp_stat) |
2906 | is->link_compressor->reset(is->link_comp_stat, | 2906 | is->link_compressor->reset(is->link_comp_stat, |
2907 | 0, 0, NULL, 0, NULL); | 2907 | 0, 0, NULL, 0, NULL); |
2908 | is->compflags &= ~SC_LINK_COMP_DISCARD; | 2908 | is->compflags &= ~SC_LINK_COMP_DISCARD; |
2909 | } | 2909 | } |
2910 | break; | 2910 | break; |
2911 | case CCP_RESETREQ: | 2911 | case CCP_RESETREQ: |
@@ -2919,7 +2919,7 @@ int isdn_ppp_register_compressor(struct isdn_ppp_compressor *ipc) | |||
2919 | { | 2919 | { |
2920 | ipc->next = ipc_head; | 2920 | ipc->next = ipc_head; |
2921 | ipc->prev = NULL; | 2921 | ipc->prev = NULL; |
2922 | if(ipc_head) { | 2922 | if (ipc_head) { |
2923 | ipc_head->prev = ipc; | 2923 | ipc_head->prev = ipc; |
2924 | } | 2924 | } |
2925 | ipc_head = ipc; | 2925 | ipc_head = ipc; |
@@ -2928,11 +2928,11 @@ int isdn_ppp_register_compressor(struct isdn_ppp_compressor *ipc) | |||
2928 | 2928 | ||
2929 | int isdn_ppp_unregister_compressor(struct isdn_ppp_compressor *ipc) | 2929 | int isdn_ppp_unregister_compressor(struct isdn_ppp_compressor *ipc) |
2930 | { | 2930 | { |
2931 | if(ipc->prev) | 2931 | if (ipc->prev) |
2932 | ipc->prev->next = ipc->next; | 2932 | ipc->prev->next = ipc->next; |
2933 | else | 2933 | else |
2934 | ipc_head = ipc->next; | 2934 | ipc_head = ipc->next; |
2935 | if(ipc->next) | 2935 | if (ipc->next) |
2936 | ipc->next->prev = ipc->prev; | 2936 | ipc->next->prev = ipc->prev; |
2937 | ipc->prev = ipc->next = NULL; | 2937 | ipc->prev = ipc->next = NULL; |
2938 | return 0; | 2938 | return 0; |
@@ -2945,26 +2945,26 @@ static int isdn_ppp_set_compressor(struct ippp_struct *is, struct isdn_ppp_comp_ | |||
2945 | void *stat; | 2945 | void *stat; |
2946 | int num = data->num; | 2946 | int num = data->num; |
2947 | 2947 | ||
2948 | if(is->debug & 0x10) | 2948 | if (is->debug & 0x10) |
2949 | printk(KERN_DEBUG "[%d] Set %s type %d\n",is->unit, | 2949 | printk(KERN_DEBUG "[%d] Set %s type %d\n", is->unit, |
2950 | (data->flags&IPPP_COMP_FLAG_XMIT)?"compressor":"decompressor",num); | 2950 | (data->flags & IPPP_COMP_FLAG_XMIT) ? "compressor" : "decompressor", num); |
2951 | 2951 | ||
2952 | /* If is has no valid reset state vector, we cannot allocate a | 2952 | /* If is has no valid reset state vector, we cannot allocate a |
2953 | decompressor. The decompressor would cause reset transactions | 2953 | decompressor. The decompressor would cause reset transactions |
2954 | sooner or later, and they need that vector. */ | 2954 | sooner or later, and they need that vector. */ |
2955 | 2955 | ||
2956 | if(!(data->flags & IPPP_COMP_FLAG_XMIT) && !is->reset) { | 2956 | if (!(data->flags & IPPP_COMP_FLAG_XMIT) && !is->reset) { |
2957 | printk(KERN_ERR "ippp_ccp: no reset data structure - can't" | 2957 | printk(KERN_ERR "ippp_ccp: no reset data structure - can't" |
2958 | " allow decompression.\n"); | 2958 | " allow decompression.\n"); |
2959 | return -ENOMEM; | 2959 | return -ENOMEM; |
2960 | } | 2960 | } |
2961 | 2961 | ||
2962 | while(ipc) { | 2962 | while (ipc) { |
2963 | if(ipc->num == num) { | 2963 | if (ipc->num == num) { |
2964 | stat = ipc->alloc(data); | 2964 | stat = ipc->alloc(data); |
2965 | if(stat) { | 2965 | if (stat) { |
2966 | ret = ipc->init(stat,data,is->unit,0); | 2966 | ret = ipc->init(stat, data, is->unit, 0); |
2967 | if(!ret) { | 2967 | if (!ret) { |
2968 | printk(KERN_ERR "Can't init (de)compression!\n"); | 2968 | printk(KERN_ERR "Can't init (de)compression!\n"); |
2969 | ipc->free(stat); | 2969 | ipc->free(stat); |
2970 | stat = NULL; | 2970 | stat = NULL; |
@@ -2976,32 +2976,32 @@ static int isdn_ppp_set_compressor(struct ippp_struct *is, struct isdn_ppp_comp_ | |||
2976 | break; | 2976 | break; |
2977 | } | 2977 | } |
2978 | 2978 | ||
2979 | if(data->flags & IPPP_COMP_FLAG_XMIT) { | 2979 | if (data->flags & IPPP_COMP_FLAG_XMIT) { |
2980 | if(data->flags & IPPP_COMP_FLAG_LINK) { | 2980 | if (data->flags & IPPP_COMP_FLAG_LINK) { |
2981 | if(is->link_comp_stat) | 2981 | if (is->link_comp_stat) |
2982 | is->link_compressor->free(is->link_comp_stat); | 2982 | is->link_compressor->free(is->link_comp_stat); |
2983 | is->link_comp_stat = stat; | 2983 | is->link_comp_stat = stat; |
2984 | is->link_compressor = ipc; | 2984 | is->link_compressor = ipc; |
2985 | } | 2985 | } |
2986 | else { | 2986 | else { |
2987 | if(is->comp_stat) | 2987 | if (is->comp_stat) |
2988 | is->compressor->free(is->comp_stat); | 2988 | is->compressor->free(is->comp_stat); |
2989 | is->comp_stat = stat; | 2989 | is->comp_stat = stat; |
2990 | is->compressor = ipc; | 2990 | is->compressor = ipc; |
2991 | } | 2991 | } |
2992 | } | 2992 | } |
2993 | else { | 2993 | else { |
2994 | if(data->flags & IPPP_COMP_FLAG_LINK) { | 2994 | if (data->flags & IPPP_COMP_FLAG_LINK) { |
2995 | if(is->link_decomp_stat) | 2995 | if (is->link_decomp_stat) |
2996 | is->link_decompressor->free(is->link_decomp_stat); | 2996 | is->link_decompressor->free(is->link_decomp_stat); |
2997 | is->link_decomp_stat = stat; | 2997 | is->link_decomp_stat = stat; |
2998 | is->link_decompressor = ipc; | 2998 | is->link_decompressor = ipc; |
2999 | } | 2999 | } |
3000 | else { | 3000 | else { |
3001 | if(is->decomp_stat) | 3001 | if (is->decomp_stat) |
3002 | is->decompressor->free(is->decomp_stat); | 3002 | is->decompressor->free(is->decomp_stat); |
3003 | is->decomp_stat = stat; | 3003 | is->decomp_stat = stat; |
3004 | is->decompressor = ipc; | 3004 | is->decompressor = ipc; |
3005 | } | 3005 | } |
3006 | } | 3006 | } |
3007 | return 0; | 3007 | return 0; |