diff options
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 @@ /* Prototypes */ static int isdn_ppp_fill_rq(unsigned char *buf, int len, int proto, int slot); static int isdn_ppp_closewait(int slot); -static void isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, +static void isdn_ppp_push_higher(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb, int proto); static int isdn_ppp_if_get_unit(char *namebuf); -static int isdn_ppp_set_compressor(struct ippp_struct *is,struct isdn_ppp_comp_data *); +static int isdn_ppp_set_compressor(struct ippp_struct *is, struct isdn_ppp_comp_data *); static struct sk_buff *isdn_ppp_decompress(struct sk_buff *, - struct ippp_struct *,struct ippp_struct *,int *proto); -static void isdn_ppp_receive_ccp(isdn_net_dev * net_dev, isdn_net_local * lp, - struct sk_buff *skb,int proto); -static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in,int *proto, - struct ippp_struct *is,struct ippp_struct *master,int type); + struct ippp_struct *, struct ippp_struct *, int *proto); +static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, + struct sk_buff *skb, int proto); +static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in, int *proto, + struct ippp_struct *is, struct ippp_struct *master, int type); static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, - struct sk_buff *skb); + struct sk_buff *skb); /* New CCP stuff */ 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, unsigned char id); static void isdn_ppp_ccp_timer_callback(unsigned long closure); static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is, - unsigned char id); + unsigned char id); static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, struct isdn_ppp_resetparams *rp); 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, #ifdef CONFIG_ISDN_MPP -static ippp_bundle * isdn_ppp_bundle_arr = NULL; - +static ippp_bundle *isdn_ppp_bundle_arr = NULL; + static int isdn_ppp_mp_bundle_array_init(void); -static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to ); -static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, - struct sk_buff *skb); -static void isdn_ppp_mp_cleanup( isdn_net_local * lp ); +static int isdn_ppp_mp_init(isdn_net_local *lp, ippp_bundle *add_to); +static void isdn_ppp_mp_receive(isdn_net_dev *net_dev, isdn_net_local *lp, + struct sk_buff *skb); +static void isdn_ppp_mp_cleanup(isdn_net_local *lp); static int isdn_ppp_bundle(struct ippp_struct *, int unit); #endif /* CONFIG_ISDN_MPP */ - + char *isdn_ppp_revision = "$Revision: 1.1.2.3 $"; static struct ippp_struct *ippp_table[ISDN_MAX_CHANNELS]; @@ -82,11 +82,11 @@ static struct isdn_ppp_compressor *ipc_head = NULL; * frame log (debug) */ static void -isdn_ppp_frame_log(char *info, char *data, int len, int maxlen,int unit,int slot) +isdn_ppp_frame_log(char *info, char *data, int len, int maxlen, int unit, int slot) { int cnt, - j, - i; + j, + i; char buf[80]; if (len < maxlen) @@ -94,8 +94,8 @@ isdn_ppp_frame_log(char *info, char *data, int len, int maxlen,int unit,int slot for (i = 0, cnt = 0; cnt < maxlen; i++) { for (j = 0; j < 16 && cnt < maxlen; j++, cnt++) - sprintf(buf + j * 3, "%02x ", (unsigned char) data[cnt]); - printk(KERN_DEBUG "[%d/%d].%s[%d]: %s\n",unit,slot, info, i, buf); + sprintf(buf + j * 3, "%02x ", (unsigned char)data[cnt]); + printk(KERN_DEBUG "[%d/%d].%s[%d]: %s\n", unit, slot, info, i, buf); } } @@ -105,13 +105,13 @@ isdn_ppp_frame_log(char *info, char *data, int len, int maxlen,int unit,int slot * in this case we bind another lp to the master device */ int -isdn_ppp_free(isdn_net_local * lp) +isdn_ppp_free(isdn_net_local *lp) { struct ippp_struct *is; if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: ppp_slot(%d) out of range\n", - __func__, lp->ppp_slot); + __func__, lp->ppp_slot); return 0; } @@ -128,7 +128,7 @@ isdn_ppp_free(isdn_net_local * lp) #endif /* CONFIG_ISDN_MPP */ if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: ppp_slot(%d) now invalid\n", - __func__, lp->ppp_slot); + __func__, lp->ppp_slot); return 0; } is = ippp_table[lp->ppp_slot]; @@ -153,7 +153,7 @@ isdn_ppp_free(isdn_net_local * lp) * no additional lock is needed */ int -isdn_ppp_bind(isdn_net_local * lp) +isdn_ppp_bind(isdn_net_local *lp) { int i; int unit = 0; @@ -195,11 +195,11 @@ isdn_ppp_bind(isdn_net_local * lp) unit = isdn_ppp_if_get_unit(lp->netdev->dev->name); if (unit < 0) { printk(KERN_ERR "isdn_ppp_bind: illegal interface name %s.\n", - lp->netdev->dev->name); + lp->netdev->dev->name); retval = -1; goto out; } - + lp->ppp_slot = i; is = ippp_table[i]; is->lp = lp; @@ -213,7 +213,7 @@ isdn_ppp_bind(isdn_net_local * lp) retval = lp->ppp_slot; - out: +out: return retval; } @@ -223,11 +223,11 @@ isdn_ppp_bind(isdn_net_local * lp) */ void -isdn_ppp_wakeup_daemon(isdn_net_local * lp) +isdn_ppp_wakeup_daemon(isdn_net_local *lp) { if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: ppp_slot(%d) out of range\n", - __func__, lp->ppp_slot); + __func__, lp->ppp_slot); return; } ippp_table[lp->ppp_slot]->state = IPPP_OPEN | IPPP_CONNECT | IPPP_NOBLOCK; @@ -246,7 +246,7 @@ isdn_ppp_closewait(int slot) if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: slot(%d) out of range\n", - __func__, slot); + __func__, slot); return 0; } is = ippp_table[slot]; @@ -289,7 +289,7 @@ isdn_ppp_open(int min, struct file *file) return -EBUSY; } is = file->private_data = ippp_table[slot]; - + printk(KERN_DEBUG "ippp, open, slot: %d, minor: %d, state: %04x\n", slot, min, is->state); @@ -385,21 +385,21 @@ isdn_ppp_release(int min, struct file *file) #endif /* TODO: if this was the previous master: link the stuff to the new master */ - if(is->comp_stat) + if (is->comp_stat) is->compressor->free(is->comp_stat); - if(is->link_comp_stat) + if (is->link_comp_stat) is->link_compressor->free(is->link_comp_stat); - if(is->link_decomp_stat) + if (is->link_decomp_stat) is->link_decompressor->free(is->link_decomp_stat); - if(is->decomp_stat) + if (is->decomp_stat) is->decompressor->free(is->decomp_stat); - is->compressor = is->link_compressor = NULL; - is->decompressor = is->link_decompressor = NULL; + is->compressor = is->link_compressor = NULL; + is->decompressor = is->link_decompressor = NULL; is->comp_stat = is->link_comp_stat = NULL; - is->decomp_stat = is->link_decomp_stat = NULL; + is->decomp_stat = is->link_decomp_stat = NULL; /* Clean up if necessary */ - if(is->reset) + if (is->reset) isdn_ppp_ccp_reset_free(is); /* this slot is ready for new connections */ @@ -423,9 +423,9 @@ get_arg(void __user *b, void *val, int len) * set arg .. ioctl helper */ static int -set_arg(void __user *b, void *val,int len) +set_arg(void __user *b, void *val, int len) { - if(len <= 0) + if (len <= 0) len = sizeof(void *); if (copy_to_user(b, val, len)) return -EFAULT; @@ -471,7 +471,7 @@ int isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg) { unsigned long val; - int r,i,j; + int r, i, j; struct ippp_struct *is; isdn_net_local *lp; struct isdn_ppp_comp_data data; @@ -487,177 +487,177 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg) return -EINVAL; switch (cmd) { - case PPPIOCBUNDLE: + case PPPIOCBUNDLE: #ifdef CONFIG_ISDN_MPP - if (!(is->state & IPPP_CONNECT)) - return -EINVAL; - if ((r = get_arg(argp, &val, sizeof(val) ))) - return r; - printk(KERN_DEBUG "iPPP-bundle: minor: %d, slave unit: %d, master unit: %d\n", - (int) min, (int) is->unit, (int) val); - return isdn_ppp_bundle(is, val); + if (!(is->state & IPPP_CONNECT)) + return -EINVAL; + if ((r = get_arg(argp, &val, sizeof(val)))) + return r; + printk(KERN_DEBUG "iPPP-bundle: minor: %d, slave unit: %d, master unit: %d\n", + (int) min, (int) is->unit, (int) val); + return isdn_ppp_bundle(is, val); #else - return -1; + return -1; #endif - break; - case PPPIOCGUNIT: /* get ppp/isdn unit number */ - if ((r = set_arg(argp, &is->unit, sizeof(is->unit) ))) - return r; - break; - case PPPIOCGIFNAME: - if(!lp) - return -EINVAL; - if ((r = set_arg(argp, lp->netdev->dev->name, - strlen(lp->netdev->dev->name)))) - return r; - break; - case PPPIOCGMPFLAGS: /* get configuration flags */ - if ((r = set_arg(argp, &is->mpppcfg, sizeof(is->mpppcfg) ))) - return r; - break; - case PPPIOCSMPFLAGS: /* set configuration flags */ - if ((r = get_arg(argp, &val, sizeof(val) ))) - return r; - is->mpppcfg = val; - break; - case PPPIOCGFLAGS: /* get configuration flags */ - if ((r = set_arg(argp, &is->pppcfg,sizeof(is->pppcfg) ))) - return r; - break; - case PPPIOCSFLAGS: /* set configuration flags */ - if ((r = get_arg(argp, &val, sizeof(val) ))) { - return r; - } - if (val & SC_ENABLE_IP && !(is->pppcfg & SC_ENABLE_IP) && (is->state & IPPP_CONNECT)) { - if (lp) { - /* OK .. we are ready to send buffers */ - is->pppcfg = val; /* isdn_ppp_xmit test for SC_ENABLE_IP !!! */ - netif_wake_queue(lp->netdev->dev); - break; - } - } - is->pppcfg = val; - break; - case PPPIOCGIDLE: /* get idle time information */ + break; + case PPPIOCGUNIT: /* get ppp/isdn unit number */ + if ((r = set_arg(argp, &is->unit, sizeof(is->unit)))) + return r; + break; + case PPPIOCGIFNAME: + if (!lp) + return -EINVAL; + if ((r = set_arg(argp, lp->netdev->dev->name, + strlen(lp->netdev->dev->name)))) + return r; + break; + case PPPIOCGMPFLAGS: /* get configuration flags */ + if ((r = set_arg(argp, &is->mpppcfg, sizeof(is->mpppcfg)))) + return r; + break; + case PPPIOCSMPFLAGS: /* set configuration flags */ + if ((r = get_arg(argp, &val, sizeof(val)))) + return r; + is->mpppcfg = val; + break; + case PPPIOCGFLAGS: /* get configuration flags */ + if ((r = set_arg(argp, &is->pppcfg, sizeof(is->pppcfg)))) + return r; + break; + case PPPIOCSFLAGS: /* set configuration flags */ + if ((r = get_arg(argp, &val, sizeof(val)))) { + return r; + } + if (val & SC_ENABLE_IP && !(is->pppcfg & SC_ENABLE_IP) && (is->state & IPPP_CONNECT)) { if (lp) { - struct ppp_idle pidle; - pidle.xmit_idle = pidle.recv_idle = lp->huptimer; - if ((r = set_arg(argp, &pidle,sizeof(struct ppp_idle)))) - return r; + /* OK .. we are ready to send buffers */ + is->pppcfg = val; /* isdn_ppp_xmit test for SC_ENABLE_IP !!! */ + netif_wake_queue(lp->netdev->dev); + break; } - break; - case PPPIOCSMRU: /* set receive unit size for PPP */ - if ((r = get_arg(argp, &val, sizeof(val) ))) - return r; - is->mru = val; - break; - case PPPIOCSMPMRU: - break; - case PPPIOCSMPMTU: - break; - case PPPIOCSMAXCID: /* set the maximum compression slot id */ - if ((r = get_arg(argp, &val, sizeof(val) ))) + } + is->pppcfg = val; + break; + case PPPIOCGIDLE: /* get idle time information */ + if (lp) { + struct ppp_idle pidle; + pidle.xmit_idle = pidle.recv_idle = lp->huptimer; + if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle)))) return r; - val++; - if (is->maxcid != val) { + } + break; + case PPPIOCSMRU: /* set receive unit size for PPP */ + if ((r = get_arg(argp, &val, sizeof(val)))) + return r; + is->mru = val; + break; + case PPPIOCSMPMRU: + break; + case PPPIOCSMPMTU: + break; + case PPPIOCSMAXCID: /* set the maximum compression slot id */ + if ((r = get_arg(argp, &val, sizeof(val)))) + return r; + val++; + if (is->maxcid != val) { #ifdef CONFIG_ISDN_PPP_VJ - struct slcompress *sltmp; + struct slcompress *sltmp; #endif - if (is->debug & 0x1) - printk(KERN_DEBUG "ippp, ioctl: changed MAXCID to %ld\n", val); - is->maxcid = val; + if (is->debug & 0x1) + printk(KERN_DEBUG "ippp, ioctl: changed MAXCID to %ld\n", val); + is->maxcid = val; #ifdef CONFIG_ISDN_PPP_VJ - sltmp = slhc_init(16, val); - if (!sltmp) { - printk(KERN_ERR "ippp, can't realloc slhc struct\n"); - return -ENOMEM; - } - if (is->slcomp) - slhc_free(is->slcomp); - is->slcomp = sltmp; -#endif - } - break; - case PPPIOCGDEBUG: - if ((r = set_arg(argp, &is->debug, sizeof(is->debug) ))) - return r; - break; - case PPPIOCSDEBUG: - if ((r = get_arg(argp, &val, sizeof(val) ))) - return r; - is->debug = val; - break; - case PPPIOCGCOMPRESSORS: - { - unsigned long protos[8] = {0,}; - struct isdn_ppp_compressor *ipc = ipc_head; - while(ipc) { - j = ipc->num / (sizeof(long)*8); - i = ipc->num % (sizeof(long)*8); - if(j < 8) - protos[j] |= (0x1<<i); - ipc = ipc->next; - } - if ((r = set_arg(argp,protos,8*sizeof(long) ))) - return r; + sltmp = slhc_init(16, val); + if (!sltmp) { + printk(KERN_ERR "ippp, can't realloc slhc struct\n"); + return -ENOMEM; } - break; - case PPPIOCSCOMPRESSOR: - if ((r = get_arg(argp, &data, sizeof(struct isdn_ppp_comp_data)))) - return r; - return isdn_ppp_set_compressor(is, &data); - case PPPIOCGCALLINFO: - { - struct pppcallinfo pci; - memset((char *) &pci,0,sizeof(struct pppcallinfo)); - if(lp) - { - strncpy(pci.local_num,lp->msn,63); - if(lp->dial) { - strncpy(pci.remote_num,lp->dial->num,63); - } - pci.charge_units = lp->charge; - if(lp->outgoing) - pci.calltype = CALLTYPE_OUTGOING; - else - pci.calltype = CALLTYPE_INCOMING; - if(lp->flags & ISDN_NET_CALLBACK) - pci.calltype |= CALLTYPE_CALLBACK; - } - return set_arg(argp,&pci,sizeof(struct pppcallinfo)); + if (is->slcomp) + slhc_free(is->slcomp); + is->slcomp = sltmp; +#endif + } + break; + case PPPIOCGDEBUG: + if ((r = set_arg(argp, &is->debug, sizeof(is->debug)))) + return r; + break; + case PPPIOCSDEBUG: + if ((r = get_arg(argp, &val, sizeof(val)))) + return r; + is->debug = val; + break; + case PPPIOCGCOMPRESSORS: + { + unsigned long protos[8] = {0,}; + struct isdn_ppp_compressor *ipc = ipc_head; + while (ipc) { + j = ipc->num / (sizeof(long) * 8); + i = ipc->num % (sizeof(long) * 8); + if (j < 8) + protos[j] |= (0x1 << i); + ipc = ipc->next; + } + if ((r = set_arg(argp, protos, 8 * sizeof(long)))) + return r; + } + break; + case PPPIOCSCOMPRESSOR: + if ((r = get_arg(argp, &data, sizeof(struct isdn_ppp_comp_data)))) + return r; + return isdn_ppp_set_compressor(is, &data); + case PPPIOCGCALLINFO: + { + struct pppcallinfo pci; + memset((char *)&pci, 0, sizeof(struct pppcallinfo)); + if (lp) + { + strncpy(pci.local_num, lp->msn, 63); + if (lp->dial) { + strncpy(pci.remote_num, lp->dial->num, 63); } + pci.charge_units = lp->charge; + if (lp->outgoing) + pci.calltype = CALLTYPE_OUTGOING; + else + pci.calltype = CALLTYPE_INCOMING; + if (lp->flags & ISDN_NET_CALLBACK) + pci.calltype |= CALLTYPE_CALLBACK; + } + return set_arg(argp, &pci, sizeof(struct pppcallinfo)); + } #ifdef CONFIG_IPPP_FILTER - case PPPIOCSPASS: - { - struct sock_filter *code; - int len = get_filter(argp, &code); - if (len < 0) - return len; - kfree(is->pass_filter); - is->pass_filter = code; - is->pass_len = len; - break; - } - case PPPIOCSACTIVE: - { - struct sock_filter *code; - int len = get_filter(argp, &code); - if (len < 0) - return len; - kfree(is->active_filter); - is->active_filter = code; - is->active_len = len; - break; - } + case PPPIOCSPASS: + { + struct sock_filter *code; + int len = get_filter(argp, &code); + if (len < 0) + return len; + kfree(is->pass_filter); + is->pass_filter = code; + is->pass_len = len; + break; + } + case PPPIOCSACTIVE: + { + struct sock_filter *code; + int len = get_filter(argp, &code); + if (len < 0) + return len; + kfree(is->active_filter); + is->active_filter = code; + is->active_len = len; + break; + } #endif /* CONFIG_IPPP_FILTER */ - default: - break; + default: + break; } return 0; } unsigned int -isdn_ppp_poll(struct file *file, poll_table * wait) +isdn_ppp_poll(struct file *file, poll_table *wait) { u_int mask; struct ippp_buf_queue *bf, *bl; @@ -668,13 +668,13 @@ isdn_ppp_poll(struct file *file, poll_table * wait) if (is->debug & 0x2) printk(KERN_DEBUG "isdn_ppp_poll: minor: %d\n", - iminor(file->f_path.dentry->d_inode)); + iminor(file->f_path.dentry->d_inode)); /* just registers wait_queue hook. This doesn't really wait. */ poll_wait(file, &is->wq, wait); if (!(is->state & IPPP_OPEN)) { - if(is->state == IPPP_CLOSEWAIT) + if (is->state == IPPP_CLOSEWAIT) return POLLHUP; printk(KERN_DEBUG "isdn_ppp: device not open\n"); return POLLERR; @@ -827,7 +827,7 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) return 0; if ((dev->drv[lp->isdn_device]->flags & DRV_FLAG_RUNNING) && - lp->dialstate == 0 && + lp->dialstate == 0 && (lp->flags & ISDN_NET_CONNECTED)) { unsigned short hl; struct sk_buff *skb; @@ -837,7 +837,7 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) * 16 bytes, now we are looking what the driver want */ hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen; - skb = alloc_skb(hl+count, GFP_ATOMIC); + skb = alloc_skb(hl + count, GFP_ATOMIC); if (!skb) { printk(KERN_WARNING "isdn_ppp_write: out of memory!\n"); return count; @@ -850,10 +850,10 @@ isdn_ppp_write(int min, struct file *file, const char __user *buf, int count) } if (is->debug & 0x40) { printk(KERN_DEBUG "ppp xmit: len %d\n", (int) skb->len); - isdn_ppp_frame_log("xmit", skb->data, skb->len, 32,is->unit,lp->ppp_slot); + isdn_ppp_frame_log("xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot); } - isdn_ppp_send_ccp(lp->netdev,lp,skb); /* keeps CCP/compression states in sync */ + isdn_ppp_send_ccp(lp->netdev, lp, skb); /* keeps CCP/compression states in sync */ isdn_net_write_super(lp, skb); } @@ -869,10 +869,10 @@ int isdn_ppp_init(void) { int i, - j; - + j; + #ifdef CONFIG_ISDN_MPP - if( isdn_ppp_mp_bundle_array_init() < 0 ) + if (isdn_ppp_mp_bundle_array_init() < 0) return -ENOMEM; #endif /* CONFIG_ISDN_MPP */ @@ -891,7 +891,7 @@ isdn_ppp_init(void) for (j = 0; j < NUM_RCV_BUFFS; j++) { ippp_table[i]->rq[j].buf = NULL; ippp_table[i]->rq[j].last = ippp_table[i]->rq + - (NUM_RCV_BUFFS + j - 1) % NUM_RCV_BUFFS; + (NUM_RCV_BUFFS + j - 1) % NUM_RCV_BUFFS; ippp_table[i]->rq[j].next = ippp_table[i]->rq + (j + 1) % NUM_RCV_BUFFS; } } @@ -916,7 +916,7 @@ isdn_ppp_cleanup(void) * check for address/control field and skip if allowed * retval != 0 -> discard packet silently */ -static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) +static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) { if (skb->len < 1) return -1; @@ -930,7 +930,7 @@ static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) // skip address/control (AC) field skb_pull(skb, 2); - } else { + } else { if (is->pppcfg & SC_REJ_COMP_AC) // if AC compression was not negotiated, but used, discard packet return -1; @@ -942,10 +942,10 @@ static int isdn_ppp_skip_ac(struct ippp_struct *is, struct sk_buff *skb) * get the PPP protocol header and pull skb * retval < 0 -> discard packet silently */ -static int isdn_ppp_strip_proto(struct sk_buff *skb) +static int isdn_ppp_strip_proto(struct sk_buff *skb) { int proto; - + if (skb->len < 1) return -1; @@ -966,7 +966,7 @@ static int isdn_ppp_strip_proto(struct sk_buff *skb) /* * handler for incoming packets on a syncPPP interface */ -void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff *skb) +void isdn_ppp_receive(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb) { struct ippp_struct *is; int slot; @@ -977,7 +977,7 @@ void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buf slot = lp->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "isdn_ppp_receive: lp->ppp_slot(%d)\n", - lp->ppp_slot); + lp->ppp_slot); kfree_skb(skb); return; } @@ -985,35 +985,35 @@ void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buf if (is->debug & 0x4) { printk(KERN_DEBUG "ippp_receive: is:%08lx lp:%08lx slot:%d unit:%d len:%d\n", - (long)is,(long)lp,lp->ppp_slot,is->unit,(int) skb->len); - isdn_ppp_frame_log("receive", skb->data, skb->len, 32,is->unit,lp->ppp_slot); - } - - if (isdn_ppp_skip_ac(is, skb) < 0) { - kfree_skb(skb); - return; - } - proto = isdn_ppp_strip_proto(skb); - if (proto < 0) { - kfree_skb(skb); - return; - } - + (long)is, (long)lp, lp->ppp_slot, is->unit, (int)skb->len); + isdn_ppp_frame_log("receive", skb->data, skb->len, 32, is->unit, lp->ppp_slot); + } + + if (isdn_ppp_skip_ac(is, skb) < 0) { + kfree_skb(skb); + return; + } + proto = isdn_ppp_strip_proto(skb); + if (proto < 0) { + kfree_skb(skb); + return; + } + #ifdef CONFIG_ISDN_MPP - if (is->compflags & SC_LINK_DECOMP_ON) { - skb = isdn_ppp_decompress(skb, is, NULL, &proto); - if (!skb) // decompression error - return; - } - - if (!(is->mpppcfg & SC_REJ_MP_PROT)) { // we agreed to receive MPPP - if (proto == PPP_MP) { - isdn_ppp_mp_receive(net_dev, lp, skb); - return; - } - } + if (is->compflags & SC_LINK_DECOMP_ON) { + skb = isdn_ppp_decompress(skb, is, NULL, &proto); + if (!skb) // decompression error + return; + } + + if (!(is->mpppcfg & SC_REJ_MP_PROT)) { // we agreed to receive MPPP + if (proto == PPP_MP) { + isdn_ppp_mp_receive(net_dev, lp, skb); + return; + } + } #endif - isdn_ppp_push_higher(net_dev, lp, skb, proto); + isdn_ppp_push_higher(net_dev, lp, skb, proto); } /* @@ -1022,116 +1022,116 @@ void isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buf * note: net_dev has to be master net_dev */ static void -isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff *skb, int proto) +isdn_ppp_push_higher(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb, int proto) { struct net_device *dev = net_dev->dev; - struct ippp_struct *is, *mis; + struct ippp_struct *is, *mis; isdn_net_local *mlp = NULL; int slot; slot = lp->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "isdn_ppp_push_higher: lp->ppp_slot(%d)\n", - lp->ppp_slot); + lp->ppp_slot); goto drop_packet; } is = ippp_table[slot]; - - if (lp->master) { // FIXME? + + if (lp->master) { // FIXME? mlp = ISDN_MASTER_PRIV(lp); - slot = mlp->ppp_slot; - if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { - printk(KERN_ERR "isdn_ppp_push_higher: master->ppp_slot(%d)\n", - lp->ppp_slot); + slot = mlp->ppp_slot; + if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { + printk(KERN_ERR "isdn_ppp_push_higher: master->ppp_slot(%d)\n", + lp->ppp_slot); goto drop_packet; - } - } - mis = ippp_table[slot]; + } + } + mis = ippp_table[slot]; if (is->debug & 0x10) { printk(KERN_DEBUG "push, skb %d %04x\n", (int) skb->len, proto); - isdn_ppp_frame_log("rpush", skb->data, skb->len, 32,is->unit,lp->ppp_slot); + isdn_ppp_frame_log("rpush", skb->data, skb->len, 32, is->unit, lp->ppp_slot); } if (mis->compflags & SC_DECOMP_ON) { skb = isdn_ppp_decompress(skb, is, mis, &proto); if (!skb) // decompression error - return; - } + return; + } switch (proto) { - case PPP_IPX: /* untested */ - if (is->debug & 0x20) - printk(KERN_DEBUG "isdn_ppp: IPX\n"); - skb->protocol = htons(ETH_P_IPX); - break; - case PPP_IP: - if (is->debug & 0x20) - printk(KERN_DEBUG "isdn_ppp: IP\n"); - skb->protocol = htons(ETH_P_IP); - break; - case PPP_COMP: - case PPP_COMPFRAG: - printk(KERN_INFO "isdn_ppp: unexpected compressed frame dropped\n"); - goto drop_packet; + case PPP_IPX: /* untested */ + if (is->debug & 0x20) + printk(KERN_DEBUG "isdn_ppp: IPX\n"); + skb->protocol = htons(ETH_P_IPX); + break; + case PPP_IP: + if (is->debug & 0x20) + printk(KERN_DEBUG "isdn_ppp: IP\n"); + skb->protocol = htons(ETH_P_IP); + break; + case PPP_COMP: + case PPP_COMPFRAG: + printk(KERN_INFO "isdn_ppp: unexpected compressed frame dropped\n"); + goto drop_packet; #ifdef CONFIG_ISDN_PPP_VJ - case PPP_VJC_UNCOMP: - if (is->debug & 0x20) - printk(KERN_DEBUG "isdn_ppp: VJC_UNCOMP\n"); + case PPP_VJC_UNCOMP: + if (is->debug & 0x20) + printk(KERN_DEBUG "isdn_ppp: VJC_UNCOMP\n"); + if (net_dev->local->ppp_slot < 0) { + printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", + __func__, net_dev->local->ppp_slot); + goto drop_packet; + } + if (slhc_remember(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb->len) <= 0) { + printk(KERN_WARNING "isdn_ppp: received illegal VJC_UNCOMP frame!\n"); + goto drop_packet; + } + skb->protocol = htons(ETH_P_IP); + break; + case PPP_VJC_COMP: + if (is->debug & 0x20) + printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); + { + struct sk_buff *skb_old = skb; + int pkt_len; + skb = dev_alloc_skb(skb_old->len + 128); + + if (!skb) { + printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); + skb = skb_old; + goto drop_packet; + } + skb_put(skb, skb_old->len + 128); + skb_copy_from_linear_data(skb_old, skb->data, + skb_old->len); if (net_dev->local->ppp_slot < 0) { printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", - __func__, net_dev->local->ppp_slot); + __func__, net_dev->local->ppp_slot); goto drop_packet; } - if (slhc_remember(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb->len) <= 0) { - printk(KERN_WARNING "isdn_ppp: received illegal VJC_UNCOMP frame!\n"); + pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, + skb->data, skb_old->len); + kfree_skb(skb_old); + if (pkt_len < 0) goto drop_packet; - } + + skb_trim(skb, pkt_len); skb->protocol = htons(ETH_P_IP); - break; - case PPP_VJC_COMP: - if (is->debug & 0x20) - printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); - { - struct sk_buff *skb_old = skb; - int pkt_len; - skb = dev_alloc_skb(skb_old->len + 128); - - if (!skb) { - printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); - skb = skb_old; - goto drop_packet; - } - skb_put(skb, skb_old->len + 128); - skb_copy_from_linear_data(skb_old, skb->data, - skb_old->len); - if (net_dev->local->ppp_slot < 0) { - printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", - __func__, net_dev->local->ppp_slot); - goto drop_packet; - } - pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, - skb->data, skb_old->len); - kfree_skb(skb_old); - if (pkt_len < 0) - goto drop_packet; - - skb_trim(skb, pkt_len); - skb->protocol = htons(ETH_P_IP); - } - break; + } + break; #endif - case PPP_CCP: - case PPP_CCPFRAG: - isdn_ppp_receive_ccp(net_dev,lp,skb,proto); - /* Dont pop up ResetReq/Ack stuff to the daemon any - longer - the job is done already */ - if(skb->data[0] == CCP_RESETREQ || - skb->data[0] == CCP_RESETACK) - break; - /* fall through */ - default: - isdn_ppp_fill_rq(skb->data, skb->len, proto, lp->ppp_slot); /* push data to pppd device */ - kfree_skb(skb); - return; + case PPP_CCP: + case PPP_CCPFRAG: + isdn_ppp_receive_ccp(net_dev, lp, skb, proto); + /* Dont pop up ResetReq/Ack stuff to the daemon any + longer - the job is done already */ + if (skb->data[0] == CCP_RESETREQ || + skb->data[0] == CCP_RESETACK) + break; + /* fall through */ + default: + isdn_ppp_fill_rq(skb->data, skb->len, proto, lp->ppp_slot); /* push data to pppd device */ + kfree_skb(skb); + return; } #ifdef CONFIG_IPPP_FILTER @@ -1173,7 +1173,7 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff /* net_dev->local->stats.rx_packets++; done in isdn_net.c */ return; - drop_packet: +drop_packet: net_dev->local->stats.rx_dropped++; kfree_skb(skb); } @@ -1183,11 +1183,11 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff * checks whether we have enough space at the beginning of the skb * and allocs a new SKB if necessary */ -static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len) +static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p, int len) { struct sk_buff *skb = *skb_p; - if(skb_headroom(skb) < len) { + if (skb_headroom(skb) < len) { struct sk_buff *nskb = skb_realloc_headroom(skb, len); if (!nskb) { @@ -1195,12 +1195,12 @@ static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len) dev_kfree_skb(skb); return NULL; } - printk(KERN_DEBUG "isdn_ppp_skb_push:under %d %d\n",skb_headroom(skb),len); + printk(KERN_DEBUG "isdn_ppp_skb_push:under %d %d\n", skb_headroom(skb), len); dev_kfree_skb(skb); *skb_p = nskb; return skb_push(nskb, len); } - return skb_push(skb,len); + return skb_push(skb, len); } /* @@ -1214,10 +1214,10 @@ static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len) int isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) { - isdn_net_local *lp,*mlp; + isdn_net_local *lp, *mlp; isdn_net_dev *nd; unsigned int proto = PPP_IP; /* 0x21 */ - struct ippp_struct *ipt,*ipts; + struct ippp_struct *ipt, *ipts; int slot, retval = NETDEV_TX_OK; mlp = netdev_priv(netdev); @@ -1226,7 +1226,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) slot = mlp->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "isdn_ppp_xmit: lp->ppp_slot(%d)\n", - mlp->ppp_slot); + mlp->ppp_slot); kfree_skb(skb); goto out; } @@ -1240,17 +1240,17 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) } switch (ntohs(skb->protocol)) { - case ETH_P_IP: - proto = PPP_IP; - break; - case ETH_P_IPX: - proto = PPP_IPX; /* untested */ - break; - default: - printk(KERN_ERR "isdn_ppp: skipped unsupported protocol: %#x.\n", - skb->protocol); - dev_kfree_skb(skb); - goto out; + case ETH_P_IP: + proto = PPP_IP; + break; + case ETH_P_IPX: + proto = PPP_IPX; /* untested */ + break; + default: + printk(KERN_ERR "isdn_ppp: skipped unsupported protocol: %#x.\n", + skb->protocol); + dev_kfree_skb(skb); + goto out; } lp = isdn_net_get_locked_lp(nd); @@ -1264,7 +1264,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) slot = lp->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "isdn_ppp_xmit: lp->ppp_slot(%d)\n", - lp->ppp_slot); + lp->ppp_slot); kfree_skb(skb); goto unlock; } @@ -1277,7 +1277,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) /* Pull off the fake header we stuck on earlier to keep * the fragmentation code happy. */ - skb_pull(skb,IPPP_MAX_HEADER); + skb_pull(skb, IPPP_MAX_HEADER); #ifdef CONFIG_IPPP_FILTER /* check if we should pass this packet @@ -1312,26 +1312,26 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) if (ipt->debug & 0x4) printk(KERN_DEBUG "xmit skb, len %d\n", (int) skb->len); - if (ipts->debug & 0x40) - isdn_ppp_frame_log("xmit0", skb->data, skb->len, 32,ipts->unit,lp->ppp_slot); + if (ipts->debug & 0x40) + isdn_ppp_frame_log("xmit0", skb->data, skb->len, 32, ipts->unit, lp->ppp_slot); #ifdef CONFIG_ISDN_PPP_VJ if (proto == PPP_IP && ipts->pppcfg & SC_COMP_TCP) { /* ipts here? probably yes, but check this again */ struct sk_buff *new_skb; - unsigned short hl; + unsigned short hl; /* * we need to reserve enough space in front of * sk_buff. old call to dev_alloc_skb only reserved * 16 bytes, now we are looking what the driver want. */ hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen + IPPP_MAX_HEADER; - /* + /* * Note: hl might still be insufficient because the method * above does not account for a possibible MPPP slave channel * which had larger HL header space requirements than the * master. */ - new_skb = alloc_skb(hl+skb->len, GFP_ATOMIC); + new_skb = alloc_skb(hl + skb->len, GFP_ATOMIC); if (new_skb) { u_char *buf; int pktlen; @@ -1342,9 +1342,9 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) buf = skb->data; pktlen = slhc_compress(ipts->slcomp, skb->data, skb->len, new_skb->data, - &buf, !(ipts->pppcfg & SC_NO_TCP_CCID)); + &buf, !(ipts->pppcfg & SC_NO_TCP_CCID)); - if (buf != skb->data) { + if (buf != skb->data) { if (new_skb->data != buf) printk(KERN_ERR "isdn_ppp: FATAL error after slhc_compress!!\n"); dev_kfree_skb(skb); @@ -1369,11 +1369,11 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) /* * normal (single link) or bundle compression */ - if(ipts->compflags & SC_COMP_ON) { + if (ipts->compflags & SC_COMP_ON) { /* We send compressed only if both down- und upstream compression is negotiated, that means, CCP is up */ - if(ipts->compflags & SC_DECOMP_ON) { - skb = isdn_ppp_compress(skb,&proto,ipt,ipts,0); + if (ipts->compflags & SC_DECOMP_ON) { + skb = isdn_ppp_compress(skb, &proto, ipt, ipts, 0); } else { printk(KERN_DEBUG "isdn_ppp: CCP not yet up - sending as-is\n"); } @@ -1389,7 +1389,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) ipts->mp_seqno++; if (ipt->mpppcfg & SC_OUT_SHORT_SEQ) { unsigned char *data = isdn_ppp_skb_push(&skb, 3); - if(!data) + if (!data) goto unlock; mp_seqno &= 0xfff; 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) data[2] = proto; /* PID compression */ } else { unsigned char *data = isdn_ppp_skb_push(&skb, 5); - if(!data) + if (!data) goto unlock; data[0] = MP_BEGIN_FRAG | MP_END_FRAG; /* (B)egin & (E)ndbit .. */ data[1] = (mp_seqno >> 16) & 0xff; /* sequence number: 24bit */ @@ -1412,25 +1412,25 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) /* * 'link in bundle' compression ... */ - if(ipt->compflags & SC_LINK_COMP_ON) - skb = isdn_ppp_compress(skb,&proto,ipt,ipts,1); + if (ipt->compflags & SC_LINK_COMP_ON) + skb = isdn_ppp_compress(skb, &proto, ipt, ipts, 1); - if( (ipt->pppcfg & SC_COMP_PROT) && (proto <= 0xff) ) { - unsigned char *data = isdn_ppp_skb_push(&skb,1); - if(!data) + if ((ipt->pppcfg & SC_COMP_PROT) && (proto <= 0xff)) { + unsigned char *data = isdn_ppp_skb_push(&skb, 1); + if (!data) goto unlock; data[0] = proto & 0xff; } else { - unsigned char *data = isdn_ppp_skb_push(&skb,2); - if(!data) + unsigned char *data = isdn_ppp_skb_push(&skb, 2); + if (!data) goto unlock; data[0] = (proto >> 8) & 0xff; data[1] = proto & 0xff; } - if(!(ipt->pppcfg & SC_COMP_AC)) { - unsigned char *data = isdn_ppp_skb_push(&skb,2); - if(!data) + if (!(ipt->pppcfg & SC_COMP_AC)) { + unsigned char *data = isdn_ppp_skb_push(&skb, 2); + if (!data) goto unlock; data[0] = 0xff; /* All Stations */ data[1] = 0x03; /* Unnumbered information */ @@ -1440,14 +1440,14 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) if (ipts->debug & 0x40) { printk(KERN_DEBUG "skb xmit: len: %d\n", (int) skb->len); - isdn_ppp_frame_log("xmit", skb->data, skb->len, 32,ipt->unit,lp->ppp_slot); + isdn_ppp_frame_log("xmit", skb->data, skb->len, 32, ipt->unit, lp->ppp_slot); } - + isdn_net_writebuf_skb(lp, skb); - unlock: +unlock: spin_unlock_bh(&lp->xmit_lock); - out: +out: return retval; } @@ -1488,12 +1488,12 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) p++; *p = htons(proto); } - + drop |= is->pass_filter - && sk_run_filter(skb, is->pass_filter) == 0; + && sk_run_filter(skb, is->pass_filter) == 0; drop |= is->active_filter - && sk_run_filter(skb, is->active_filter) == 0; - + && sk_run_filter(skb, is->active_filter) == 0; + skb_push(skb, IPPP_MAX_HEADER - 4); return drop; } @@ -1502,8 +1502,8 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) /* this is _not_ rfc1990 header, but something we convert both short and long * headers to for convinience's sake: - * byte 0 is flags as in rfc1990 - * bytes 1...4 is 24-bit seqence number converted to host byte order + * byte 0 is flags as in rfc1990 + * bytes 1...4 is 24-bit seqence number converted to host byte order */ #define MP_HEADER_LEN 5 @@ -1511,51 +1511,51 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) #define MP_SHORTSEQ_MASK 0x00000fff #define MP_LONGSEQ_MAX MP_LONGSEQ_MASK #define MP_SHORTSEQ_MAX MP_SHORTSEQ_MASK -#define MP_LONGSEQ_MAXBIT ((MP_LONGSEQ_MASK+1)>>1) -#define MP_SHORTSEQ_MAXBIT ((MP_SHORTSEQ_MASK+1)>>1) +#define MP_LONGSEQ_MAXBIT ((MP_LONGSEQ_MASK + 1) >> 1) +#define MP_SHORTSEQ_MAXBIT ((MP_SHORTSEQ_MASK + 1) >> 1) /* sequence-wrap safe comparisons (for long sequence)*/ -#define MP_LT(a,b) ((a-b)&MP_LONGSEQ_MAXBIT) -#define MP_LE(a,b) !((b-a)&MP_LONGSEQ_MAXBIT) -#define MP_GT(a,b) ((b-a)&MP_LONGSEQ_MAXBIT) -#define MP_GE(a,b) !((a-b)&MP_LONGSEQ_MAXBIT) +#define MP_LT(a, b) ((a - b) & MP_LONGSEQ_MAXBIT) +#define MP_LE(a, b) !((b - a) & MP_LONGSEQ_MAXBIT) +#define MP_GT(a, b) ((b - a) & MP_LONGSEQ_MAXBIT) +#define MP_GE(a, b) !((a - b) & MP_LONGSEQ_MAXBIT) -#define MP_SEQ(f) ((*(u32*)(f->data+1))) +#define MP_SEQ(f) ((*(u32 *)(f->data + 1))) #define MP_FLAGS(f) (f->data[0]) static int isdn_ppp_mp_bundle_array_init(void) { int i; - int sz = ISDN_MAX_CHANNELS*sizeof(ippp_bundle); - if( (isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL ) + int sz = ISDN_MAX_CHANNELS * sizeof(ippp_bundle); + if ((isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL) return -ENOMEM; - for( i = 0; i < ISDN_MAX_CHANNELS; i++ ) + for (i = 0; i < ISDN_MAX_CHANNELS; i++) spin_lock_init(&isdn_ppp_bundle_arr[i].lock); return 0; } -static ippp_bundle * isdn_ppp_mp_bundle_alloc(void) +static ippp_bundle *isdn_ppp_mp_bundle_alloc(void) { int i; - for( i = 0; i < ISDN_MAX_CHANNELS; i++ ) + for (i = 0; i < ISDN_MAX_CHANNELS; i++) if (isdn_ppp_bundle_arr[i].ref_ct <= 0) return (isdn_ppp_bundle_arr + i); return NULL; } -static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to ) +static int isdn_ppp_mp_init(isdn_net_local *lp, ippp_bundle *add_to) { - struct ippp_struct * is; + struct ippp_struct *is; if (lp->ppp_slot < 0) { printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", - __func__, lp->ppp_slot); - return(-EINVAL); + __func__, lp->ppp_slot); + return (-EINVAL); } is = ippp_table[lp->ppp_slot]; if (add_to) { - if( lp->netdev->pb ) + if (lp->netdev->pb) lp->netdev->pb->ref_ct--; lp->netdev->pb = add_to; } else { /* first link in a bundle */ @@ -1568,76 +1568,76 @@ static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to ) lp->netdev->pb->seq = UINT_MAX; } lp->netdev->pb->ref_ct++; - + is->last_link_seqno = 0; return 0; } -static u32 isdn_ppp_mp_get_seq( int short_seq, - struct sk_buff * skb, u32 last_seq ); -static struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp, - struct sk_buff * from, struct sk_buff * to ); -static void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp, - struct sk_buff * from, struct sk_buff * to ); -static void isdn_ppp_mp_free_skb( ippp_bundle * mp, struct sk_buff * skb ); -static void isdn_ppp_mp_print_recv_pkt( int slot, struct sk_buff * skb ); - -static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, - struct sk_buff *skb) +static u32 isdn_ppp_mp_get_seq(int short_seq, + struct sk_buff *skb, u32 last_seq); +static struct sk_buff *isdn_ppp_mp_discard(ippp_bundle *mp, + struct sk_buff *from, struct sk_buff *to); +static void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp, + struct sk_buff *from, struct sk_buff *to); +static void isdn_ppp_mp_free_skb(ippp_bundle *mp, struct sk_buff *skb); +static void isdn_ppp_mp_print_recv_pkt(int slot, struct sk_buff *skb); + +static void isdn_ppp_mp_receive(isdn_net_dev *net_dev, isdn_net_local *lp, + struct sk_buff *skb) { struct ippp_struct *is; - isdn_net_local * lpq; - ippp_bundle * mp; - isdn_mppp_stats * stats; - struct sk_buff * newfrag, * frag, * start, *nextf; + isdn_net_local *lpq; + ippp_bundle *mp; + isdn_mppp_stats *stats; + struct sk_buff *newfrag, *frag, *start, *nextf; u32 newseq, minseq, thisseq; unsigned long flags; int slot; spin_lock_irqsave(&net_dev->pb->lock, flags); - mp = net_dev->pb; - stats = &mp->stats; + mp = net_dev->pb; + stats = &mp->stats; slot = lp->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: lp->ppp_slot(%d)\n", - __func__, lp->ppp_slot); + __func__, lp->ppp_slot); stats->frame_drops++; dev_kfree_skb(skb); spin_unlock_irqrestore(&mp->lock, flags); return; } is = ippp_table[slot]; - if( ++mp->frames > stats->max_queue_len ) + if (++mp->frames > stats->max_queue_len) stats->max_queue_len = mp->frames; - + if (is->debug & 0x8) isdn_ppp_mp_print_recv_pkt(lp->ppp_slot, skb); - newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ, - skb, is->last_link_seqno); + newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ, + skb, is->last_link_seqno); /* if this packet seq # is less than last already processed one, - * toss it right away, but check for sequence start case first + * toss it right away, but check for sequence start case first */ - if( mp->seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT) ) { + if (mp->seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT)) { mp->seq = newseq; /* the first packet: required for * rfc1990 non-compliant clients -- * prevents constant packet toss */ - } else if( MP_LT(newseq, mp->seq) ) { + } else if (MP_LT(newseq, mp->seq)) { stats->frame_drops++; isdn_ppp_mp_free_skb(mp, skb); spin_unlock_irqrestore(&mp->lock, flags); return; } - + /* find the minimum received sequence number over all links */ is->last_link_seqno = minseq = newseq; for (lpq = net_dev->queue;;) { slot = lpq->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: lpq->ppp_slot(%d)\n", - __func__, lpq->ppp_slot); + __func__, lpq->ppp_slot); } else { u32 lls = ippp_table[slot]->last_link_seqno; if (MP_LT(lls, minseq)) @@ -1651,17 +1651,17 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, * packets */ newfrag = skb; - /* if this new fragment is before the first one, then enqueue it now. */ - if ((frag = mp->frags) == NULL || MP_LT(newseq, MP_SEQ(frag))) { + /* if this new fragment is before the first one, then enqueue it now. */ + if ((frag = mp->frags) == NULL || MP_LT(newseq, MP_SEQ(frag))) { newfrag->next = frag; - mp->frags = frag = newfrag; - newfrag = NULL; - } + mp->frags = frag = newfrag; + newfrag = NULL; + } - start = MP_FLAGS(frag) & MP_BEGIN_FRAG && - MP_SEQ(frag) == mp->seq ? frag : NULL; + start = MP_FLAGS(frag) & MP_BEGIN_FRAG && + MP_SEQ(frag) == mp->seq ? frag : NULL; - /* + /* * main fragment traversing loop * * try to accomplish several tasks: @@ -1675,71 +1675,71 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, * come to complete such sequence and it should be discarded * * loop completes when we accomplished the following tasks: - * - new fragment is inserted in the proper sequence ('newfrag' is + * - new fragment is inserted in the proper sequence ('newfrag' is * set to NULL) - * - we hit a gap in the sequence, so no reassembly/processing is + * - we hit a gap in the sequence, so no reassembly/processing is * possible ('start' would be set to NULL) * * algorithm for this code is derived from code in the book * 'PPP Design And Debugging' by James Carlson (Addison-Wesley) */ - while (start != NULL || newfrag != NULL) { - - thisseq = MP_SEQ(frag); - nextf = frag->next; - - /* drop any duplicate fragments */ - if (newfrag != NULL && thisseq == newseq) { - isdn_ppp_mp_free_skb(mp, newfrag); - newfrag = NULL; - } - - /* insert new fragment before next element if possible. */ - if (newfrag != NULL && (nextf == NULL || - MP_LT(newseq, MP_SEQ(nextf)))) { - newfrag->next = nextf; - frag->next = nextf = newfrag; - newfrag = NULL; - } - - if (start != NULL) { - /* check for misplaced start */ - if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) { + while (start != NULL || newfrag != NULL) { + + thisseq = MP_SEQ(frag); + nextf = frag->next; + + /* drop any duplicate fragments */ + if (newfrag != NULL && thisseq == newseq) { + isdn_ppp_mp_free_skb(mp, newfrag); + newfrag = NULL; + } + + /* insert new fragment before next element if possible. */ + if (newfrag != NULL && (nextf == NULL || + MP_LT(newseq, MP_SEQ(nextf)))) { + newfrag->next = nextf; + frag->next = nextf = newfrag; + newfrag = NULL; + } + + if (start != NULL) { + /* check for misplaced start */ + if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) { printk(KERN_WARNING"isdn_mppp(seq %d): new " - "BEGIN flag with no prior END", thisseq); + "BEGIN flag with no prior END", thisseq); stats->seqerrs++; stats->frame_drops++; - start = isdn_ppp_mp_discard(mp, start,frag); + start = isdn_ppp_mp_discard(mp, start, frag); nextf = frag->next; - } - } else if (MP_LE(thisseq, minseq)) { - if (MP_FLAGS(frag) & MP_BEGIN_FRAG) + } + } else if (MP_LE(thisseq, minseq)) { + if (MP_FLAGS(frag) & MP_BEGIN_FRAG) start = frag; - else { + else { if (MP_FLAGS(frag) & MP_END_FRAG) - stats->frame_drops++; - if( mp->frags == frag ) - mp->frags = nextf; + stats->frame_drops++; + if (mp->frags == frag) + mp->frags = nextf; isdn_ppp_mp_free_skb(mp, frag); frag = nextf; continue; - } + } } - + /* if start is non-null and we have end fragment, then - * we have full reassembly sequence -- reassemble + * we have full reassembly sequence -- reassemble * and process packet now */ - if (start != NULL && (MP_FLAGS(frag) & MP_END_FRAG)) { - minseq = mp->seq = (thisseq+1) & MP_LONGSEQ_MASK; - /* Reassemble the packet then dispatch it */ + if (start != NULL && (MP_FLAGS(frag) & MP_END_FRAG)) { + minseq = mp->seq = (thisseq + 1) & MP_LONGSEQ_MASK; + /* Reassemble the packet then dispatch it */ isdn_ppp_mp_reassembly(net_dev, lp, start, nextf); - - start = NULL; - frag = NULL; - mp->frags = nextf; - } + start = NULL; + frag = NULL; + + mp->frags = nextf; + } /* check if need to update start pointer: if we just * 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, * if sequence is not contiguous, either clear everything * below low watermark and set start to the next frag or * clear start ptr. - */ - if (nextf != NULL && - ((thisseq+1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) { - /* if we just reassembled and the next one is here, + */ + if (nextf != NULL && + ((thisseq + 1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) { + /* if we just reassembled and the next one is here, * then start another reassembly. */ - if (frag == NULL) { + if (frag == NULL) { if (MP_FLAGS(nextf) & MP_BEGIN_FRAG) - start = nextf; + start = nextf; else { - printk(KERN_WARNING"isdn_mppp(seq %d):" - " END flag with no following " - "BEGIN", thisseq); + printk(KERN_WARNING"isdn_mppp(seq %d):" + " END flag with no following " + "BEGIN", thisseq); stats->seqerrs++; } } - } else { - if ( nextf != NULL && frag != NULL && - MP_LT(thisseq, minseq)) { + } else { + if (nextf != NULL && frag != NULL && + MP_LT(thisseq, minseq)) { /* we've got a break in the sequence * and we not at the end yet * and we did not just reassembled *(if we did, there wouldn't be anything before) - * and we below the low watermark - * discard all the frames below low watermark + * and we below the low watermark + * discard all the frames below low watermark * and start over */ stats->frame_drops++; - mp->frags = isdn_ppp_mp_discard(mp,start,nextf); + mp->frags = isdn_ppp_mp_discard(mp, start, nextf); } /* break in the sequence, no reassembly */ - start = NULL; - } - - frag = nextf; - } /* while -- main loop */ - - if (mp->frags == NULL) - mp->frags = frag; - - /* rather straighforward way to deal with (not very) possible + start = NULL; + } + + frag = nextf; + } /* while -- main loop */ + + if (mp->frags == NULL) + mp->frags = frag; + + /* rather straighforward way to deal with (not very) possible * queue overflow */ if (mp->frames > MP_MAX_QUEUE_LEN) { stats->overflows++; @@ -1803,11 +1803,11 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, spin_unlock_irqrestore(&mp->lock, flags); } -static void isdn_ppp_mp_cleanup( isdn_net_local * lp ) +static void isdn_ppp_mp_cleanup(isdn_net_local *lp) { - struct sk_buff * frag = lp->netdev->pb->frags; - struct sk_buff * nextfrag; - while( frag ) { + struct sk_buff *frag = lp->netdev->pb->frags; + struct sk_buff *nextfrag; + while (frag) { nextfrag = frag->next; isdn_ppp_mp_free_skb(lp->netdev->pb, frag); frag = nextfrag; @@ -1815,117 +1815,117 @@ static void isdn_ppp_mp_cleanup( isdn_net_local * lp ) lp->netdev->pb->frags = NULL; } -static u32 isdn_ppp_mp_get_seq( int short_seq, - struct sk_buff * skb, u32 last_seq ) +static u32 isdn_ppp_mp_get_seq(int short_seq, + struct sk_buff *skb, u32 last_seq) { u32 seq; int flags = skb->data[0] & (MP_BEGIN_FRAG | MP_END_FRAG); - - if( !short_seq ) + + if (!short_seq) { seq = ntohl(*(__be32 *)skb->data) & MP_LONGSEQ_MASK; - skb_push(skb,1); + skb_push(skb, 1); } else { - /* convert 12-bit short seq number to 24-bit long one - */ + /* convert 12-bit short seq number to 24-bit long one + */ seq = ntohs(*(__be16 *)skb->data) & MP_SHORTSEQ_MASK; - + /* check for seqence wrap */ - if( !(seq & MP_SHORTSEQ_MAXBIT) && - (last_seq & MP_SHORTSEQ_MAXBIT) && - (unsigned long)last_seq <= MP_LONGSEQ_MAX ) - seq |= (last_seq + MP_SHORTSEQ_MAX+1) & - (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); + if (!(seq & MP_SHORTSEQ_MAXBIT) && + (last_seq & MP_SHORTSEQ_MAXBIT) && + (unsigned long)last_seq <= MP_LONGSEQ_MAX) + seq |= (last_seq + MP_SHORTSEQ_MAX + 1) & + (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); else seq |= last_seq & (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK); - + skb_push(skb, 3); /* put converted seqence back in skb */ } - *(u32*)(skb->data+1) = seq; /* put seqence back in _host_ byte + *(u32 *)(skb->data + 1) = seq; /* put seqence back in _host_ byte * order */ skb->data[0] = flags; /* restore flags */ return seq; } -struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp, - struct sk_buff * from, struct sk_buff * to ) +struct sk_buff *isdn_ppp_mp_discard(ippp_bundle *mp, + struct sk_buff *from, struct sk_buff *to) { - if( from ) + if (from) while (from != to) { - struct sk_buff * next = from->next; + struct sk_buff *next = from->next; isdn_ppp_mp_free_skb(mp, from); - from = next; + from = next; } return from; } -void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp, - struct sk_buff * from, struct sk_buff * to ) +void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp, + struct sk_buff *from, struct sk_buff *to) { - ippp_bundle * mp = net_dev->pb; + ippp_bundle *mp = net_dev->pb; int proto; - struct sk_buff * skb; + struct sk_buff *skb; unsigned int tot_len; if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", - __func__, lp->ppp_slot); + __func__, lp->ppp_slot); return; } - if( MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG) ) { - if( ippp_table[lp->ppp_slot]->debug & 0x40 ) + if (MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG)) { + if (ippp_table[lp->ppp_slot]->debug & 0x40) printk(KERN_DEBUG "isdn_mppp: reassembly: frame %d, " - "len %d\n", MP_SEQ(from), from->len ); + "len %d\n", MP_SEQ(from), from->len); skb = from; skb_pull(skb, MP_HEADER_LEN); - mp->frames--; + mp->frames--; } else { - struct sk_buff * frag; + struct sk_buff *frag; int n; - for(tot_len=n=0, frag=from; frag != to; frag=frag->next, n++) + for (tot_len = n = 0, frag = from; frag != to; frag = frag->next, n++) tot_len += frag->len - MP_HEADER_LEN; - if( ippp_table[lp->ppp_slot]->debug & 0x40 ) + if (ippp_table[lp->ppp_slot]->debug & 0x40) printk(KERN_DEBUG"isdn_mppp: reassembling frames %d " - "to %d, len %d\n", MP_SEQ(from), - (MP_SEQ(from)+n-1) & MP_LONGSEQ_MASK, tot_len ); - if( (skb = dev_alloc_skb(tot_len)) == NULL ) { + "to %d, len %d\n", MP_SEQ(from), + (MP_SEQ(from) + n - 1) & MP_LONGSEQ_MASK, tot_len); + if ((skb = dev_alloc_skb(tot_len)) == NULL) { printk(KERN_ERR "isdn_mppp: cannot allocate sk buff " - "of size %d\n", tot_len); + "of size %d\n", tot_len); isdn_ppp_mp_discard(mp, from, to); return; } - while( from != to ) { + while (from != to) { unsigned int len = from->len - MP_HEADER_LEN; skb_copy_from_linear_data_offset(from, MP_HEADER_LEN, - skb_put(skb,len), + skb_put(skb, len), len); frag = from->next; isdn_ppp_mp_free_skb(mp, from); - from = frag; + from = frag; } } - proto = isdn_ppp_strip_proto(skb); + proto = isdn_ppp_strip_proto(skb); isdn_ppp_push_higher(net_dev, lp, skb, proto); } -static void isdn_ppp_mp_free_skb(ippp_bundle * mp, struct sk_buff * skb) +static void isdn_ppp_mp_free_skb(ippp_bundle *mp, struct sk_buff *skb) { dev_kfree_skb(skb); mp->frames--; } -static void isdn_ppp_mp_print_recv_pkt( int slot, struct sk_buff * skb ) +static void isdn_ppp_mp_print_recv_pkt(int slot, struct sk_buff *skb) { - printk(KERN_DEBUG "mp_recv: %d/%d -> %02x %02x %02x %02x %02x %02x\n", - slot, (int) skb->len, - (int) skb->data[0], (int) skb->data[1], (int) skb->data[2], - (int) skb->data[3], (int) skb->data[4], (int) skb->data[5]); + printk(KERN_DEBUG "mp_recv: %d/%d -> %02x %02x %02x %02x %02x %02x\n", + slot, (int) skb->len, + (int) skb->data[0], (int) skb->data[1], (int) skb->data[2], + (int) skb->data[3], (int) skb->data[4], (int) skb->data[5]); } static int @@ -1944,18 +1944,18 @@ isdn_ppp_bundle(struct ippp_struct *is, int unit) return -EINVAL; } - spin_lock_irqsave(&p->pb->lock, flags); + spin_lock_irqsave(&p->pb->lock, flags); nlp = is->lp; lp = p->queue; - if( nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS || - lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS ) { + if (nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS || + lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "ippp_bundle: binding to invalid slot %d\n", - nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS ? - nlp->ppp_slot : lp->ppp_slot ); + nlp->ppp_slot < 0 || nlp->ppp_slot >= ISDN_MAX_CHANNELS ? + nlp->ppp_slot : lp->ppp_slot); rc = -EINVAL; goto out; - } + } isdn_net_add_to_bundle(p, nlp); @@ -1971,9 +1971,9 @@ out: spin_unlock_irqrestore(&p->pb->lock, flags); return rc; } - + #endif /* CONFIG_ISDN_MPP */ - + /* * network device ioctl handlers */ @@ -2020,7 +2020,7 @@ isdn_ppp_dev_ioctl_stats(int slot, struct ifreq *ifr, struct net_device *dev) int isdn_ppp_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - int error=0; + int error = 0; int len; isdn_net_local *lp = netdev_priv(dev); @@ -2030,18 +2030,18 @@ isdn_ppp_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) switch (cmd) { #define PPP_VERSION "2.3.7" - case SIOCGPPPVER: - len = strlen(PPP_VERSION) + 1; - if (copy_to_user(ifr->ifr_data, PPP_VERSION, len)) - error = -EFAULT; - break; + case SIOCGPPPVER: + len = strlen(PPP_VERSION) + 1; + if (copy_to_user(ifr->ifr_data, PPP_VERSION, len)) + error = -EFAULT; + break; - case SIOCGPPPSTATS: - error = isdn_ppp_dev_ioctl_stats(lp->ppp_slot, ifr, dev); - break; - default: - error = -EINVAL; - break; + case SIOCGPPPSTATS: + error = isdn_ppp_dev_ioctl_stats(lp->ppp_slot, ifr, dev); + break; + default: + error = -EINVAL; + break; } return error; } @@ -2050,9 +2050,9 @@ static int isdn_ppp_if_get_unit(char *name) { int len, - i, - unit = 0, - deci; + i, + unit = 0, + deci; len = strlen(name); @@ -2129,7 +2129,7 @@ isdn_ppp_hangup_slave(char *name) break; } else if (mlp->flags & ISDN_NET_CONNECTED) break; - + sdev = mlp->slave; } if (!sdev) @@ -2202,8 +2202,8 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto, /* Alloc large enough skb */ hl = dev->drv[lp->isdn_device]->interface->hl_hdrlen; - skb = alloc_skb(len + hl + 16,GFP_ATOMIC); - if(!skb) { + skb = alloc_skb(len + hl + 16, GFP_ATOMIC); + if (!skb) { printk(KERN_WARNING "ippp: CCP cannot send reset - out of memory\n"); return; @@ -2211,7 +2211,7 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto, skb_reserve(skb, hl); /* We may need to stuff an address and control field first */ - if(!(is->pppcfg & SC_COMP_AC)) { + if (!(is->pppcfg & SC_COMP_AC)) { p = skb_put(skb, 2); *p++ = 0xff; *p++ = 0x03; @@ -2228,14 +2228,14 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto, *p++ = (cnt & 0xff); /* Now stuff remaining bytes */ - if(len) { + if (len) { p = skb_put(skb, len); memcpy(p, data, len); } /* skb is now ready for xmit */ printk(KERN_DEBUG "Sending CCP Frame:\n"); - isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot); + isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot); isdn_net_write_super(lp, skb); } @@ -2245,7 +2245,7 @@ static struct ippp_ccp_reset *isdn_ppp_ccp_reset_alloc(struct ippp_struct *is) { struct ippp_ccp_reset *r; r = kzalloc(sizeof(struct ippp_ccp_reset), GFP_KERNEL); - if(!r) { + if (!r) { printk(KERN_ERR "ippp_ccp: failed to allocate reset data" " structure - no mem\n"); return NULL; @@ -2262,8 +2262,8 @@ static void isdn_ppp_ccp_reset_free(struct ippp_struct *is) printk(KERN_DEBUG "ippp_ccp: freeing reset data structure %p\n", is->reset); - for(id = 0; id < 256; id++) { - if(is->reset->rs[id]) { + for (id = 0; id < 256; id++) { + if (is->reset->rs[id]) { isdn_ppp_ccp_reset_free_state(is, (unsigned char)id); } } @@ -2277,11 +2277,11 @@ static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is, { struct ippp_ccp_reset_state *rs; - if(is->reset->rs[id]) { + if (is->reset->rs[id]) { printk(KERN_DEBUG "ippp_ccp: freeing state for id %d\n", id); rs = is->reset->rs[id]; /* Make sure the kernel will not call back later */ - if(rs->ta) + if (rs->ta) del_timer(&rs->timer); is->reset->rs[id] = NULL; kfree(rs); @@ -2297,13 +2297,13 @@ static void isdn_ppp_ccp_timer_callback(unsigned long closure) struct ippp_ccp_reset_state *rs = (struct ippp_ccp_reset_state *)closure; - if(!rs) { + if (!rs) { printk(KERN_ERR "ippp_ccp: timer cb with zero closure.\n"); return; } - if(rs->ta && rs->state == CCPResetSentReq) { + if (rs->ta && rs->state == CCPResetSentReq) { /* We are correct here */ - if(!rs->expra) { + if (!rs->expra) { /* Hmm, there is no Ack really expected. We can clean up the state now, it will be reallocated if the decompressor insists on another reset */ @@ -2317,7 +2317,7 @@ static void isdn_ppp_ccp_timer_callback(unsigned long closure) isdn_ppp_ccp_xmit_reset(rs->is, PPP_CCP, CCP_RESETREQ, rs->id, rs->data, rs->dlen); /* Restart timer */ - rs->timer.expires = jiffies + HZ*5; + rs->timer.expires = jiffies + HZ * 5; add_timer(&rs->timer); } else { 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) /* Allocate a new reset transaction state */ static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is, - unsigned char id) + unsigned char id) { struct ippp_ccp_reset_state *rs; - if(is->reset->rs[id]) { + if (is->reset->rs[id]) { printk(KERN_WARNING "ippp_ccp: old state exists for id %d\n", id); return NULL; } else { rs = kzalloc(sizeof(struct ippp_ccp_reset_state), GFP_KERNEL); - if(!rs) + if (!rs) return NULL; rs->state = CCPResetIdle; rs->is = is; @@ -2357,21 +2357,21 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, { struct ippp_ccp_reset_state *rs; - if(rp->valid) { + if (rp->valid) { /* The decompressor defines parameters by itself */ - if(rp->rsend) { + if (rp->rsend) { /* And he wants us to send a request */ - if(!(rp->idval)) { + if (!(rp->idval)) { printk(KERN_ERR "ippp_ccp: decompressor must" " specify reset id\n"); return; } - if(is->reset->rs[rp->id]) { + if (is->reset->rs[rp->id]) { /* There is already a transaction in existence for this id. May be still waiting for a Ack or may be wrong. */ rs = is->reset->rs[rp->id]; - if(rs->state == CCPResetSentReq && rs->ta) { + if (rs->state == CCPResetSentReq && rs->ta) { printk(KERN_DEBUG "ippp_ccp: reset" " trans still in progress" " for id %d\n", rp->id); @@ -2385,14 +2385,14 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, printk(KERN_DEBUG "ippp_ccp: new trans for id" " %d to be started\n", rp->id); rs = isdn_ppp_ccp_reset_alloc_state(is, rp->id); - if(!rs) { + if (!rs) { printk(KERN_ERR "ippp_ccp: out of mem" " allocing ccp trans\n"); return; } rs->state = CCPResetSentReq; rs->expra = rp->expra; - if(rp->dtval) { + if (rp->dtval) { rs->dlen = rp->dlen; memcpy(rs->data, rp->data, rp->dlen); } @@ -2401,7 +2401,7 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, CCP_RESETREQ, rs->id, rs->data, rs->dlen); /* Start the timer */ - rs->timer.expires = jiffies + 5*HZ; + rs->timer.expires = jiffies + 5 * HZ; add_timer(&rs->timer); rs->ta = 1; } @@ -2413,12 +2413,12 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, care about them, so we just send the minimal requests and increase ids only when an Ack is received for a given id */ - if(is->reset->rs[is->reset->lastid]) { + if (is->reset->rs[is->reset->lastid]) { /* There is already a transaction in existence for this id. May be still waiting for a Ack or may be wrong. */ rs = is->reset->rs[is->reset->lastid]; - if(rs->state == CCPResetSentReq && rs->ta) { + if (rs->state == CCPResetSentReq && rs->ta) { printk(KERN_DEBUG "ippp_ccp: reset" " trans still in progress" " for id %d\n", rp->id); @@ -2432,7 +2432,7 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, " %d to be started\n", is->reset->lastid); rs = isdn_ppp_ccp_reset_alloc_state(is, is->reset->lastid); - if(!rs) { + if (!rs) { printk(KERN_ERR "ippp_ccp: out of mem" " allocing ccp trans\n"); return; @@ -2446,7 +2446,7 @@ static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, isdn_ppp_ccp_xmit_reset(is, PPP_CCP, CCP_RESETREQ, rs->id, NULL, 0); /* Start the timer */ - rs->timer.expires = jiffies + 5*HZ; + rs->timer.expires = jiffies + 5 * HZ; add_timer(&rs->timer); rs->ta = 1; } @@ -2460,17 +2460,17 @@ static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, { struct ippp_ccp_reset_state *rs = is->reset->rs[id]; - if(rs) { - if(rs->ta && rs->state == CCPResetSentReq) { + if (rs) { + if (rs->ta && rs->state == CCPResetSentReq) { /* Great, we are correct */ - if(!rs->expra) + if (!rs->expra) printk(KERN_DEBUG "ippp_ccp: ResetAck received" " for id %d but not expected\n", id); } else { printk(KERN_INFO "ippp_ccp: ResetAck received out of" "sync for id %d\n", id); } - if(rs->ta) { + if (rs->ta) { rs->ta = 0; del_timer(&rs->timer); } @@ -2483,7 +2483,7 @@ static void isdn_ppp_ccp_reset_ack_rcvd(struct ippp_struct *is, is->reset->lastid++; } -/* +/* * decompress packet * * 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, * NULL if decompression error */ -static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struct *is,struct ippp_struct *master, - int *proto) +static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb, struct ippp_struct *is, struct ippp_struct *master, + int *proto) { void *stat = NULL; struct isdn_ppp_compressor *ipc = NULL; @@ -2506,8 +2506,8 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc struct isdn_ppp_resetparams rsparm; unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; - if(!master) { - // per-link decompression + if (!master) { + // per-link decompression stat = is->link_decomp_stat; ipc = is->link_decompressor; ri = is; @@ -2524,28 +2524,28 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc } BUG_ON(!stat); // if we have a compressor, stat has been set as well - if((master && *proto == PPP_COMP) || (!master && *proto == PPP_COMPFRAG) ) { + if ((master && *proto == PPP_COMP) || (!master && *proto == PPP_COMPFRAG)) { // compressed packets are compressed by their protocol type // Set up reset params for the decompressor - memset(&rsparm, 0, sizeof(rsparm)); - rsparm.data = rsdata; - rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; - - skb_out = dev_alloc_skb(is->mru + PPP_HDRLEN); - if (!skb_out) { - kfree_skb(skb); - printk(KERN_ERR "ippp: decomp memory allocation failure\n"); + memset(&rsparm, 0, sizeof(rsparm)); + rsparm.data = rsdata; + rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; + + skb_out = dev_alloc_skb(is->mru + PPP_HDRLEN); + if (!skb_out) { + kfree_skb(skb); + printk(KERN_ERR "ippp: decomp memory allocation failure\n"); return NULL; - } + } len = ipc->decompress(stat, skb, skb_out, &rsparm); kfree_skb(skb); if (len <= 0) { - switch(len) { + switch (len) { case DECOMP_ERROR: printk(KERN_INFO "ippp: decomp wants reset %s params\n", rsparm.valid ? "with" : "without"); - + isdn_ppp_ccp_reset_trans(ri, &rsparm); break; case DECOMP_FATALERROR: @@ -2563,7 +2563,7 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc return NULL; } return skb_out; - } else { + } else { // uncompressed packets are fed through the decompressor to // update the decompressor state ipc->incomp(stat, skb, *proto); @@ -2572,31 +2572,31 @@ static struct sk_buff *isdn_ppp_decompress(struct sk_buff *skb,struct ippp_struc } /* - * compress a frame + * compress a frame * type=0: normal/bundle compression * =1: link compression * returns original skb if we haven't compressed the frame * and a new skb pointer if we've done it */ -static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in,int *proto, - struct ippp_struct *is,struct ippp_struct *master,int type) +static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in, int *proto, + struct ippp_struct *is, struct ippp_struct *master, int type) { - int ret; - int new_proto; - struct isdn_ppp_compressor *compressor; - void *stat; - struct sk_buff *skb_out; + int ret; + int new_proto; + struct isdn_ppp_compressor *compressor; + void *stat; + struct sk_buff *skb_out; /* we do not compress control protocols */ - if(*proto < 0 || *proto > 0x3fff) { - return skb_in; - } + if (*proto < 0 || *proto > 0x3fff) { + return skb_in; + } - if(type) { /* type=1 => Link compression */ + if (type) { /* type=1 => Link compression */ return skb_in; } else { - if(!master) { + if (!master) { compressor = is->compressor; stat = is->comp_stat; } @@ -2607,90 +2607,90 @@ static struct sk_buff *isdn_ppp_compress(struct sk_buff *skb_in,int *proto, new_proto = PPP_COMP; } - if(!compressor) { + if (!compressor) { printk(KERN_ERR "isdn_ppp: No compressor set!\n"); return skb_in; } - if(!stat) { + if (!stat) { printk(KERN_ERR "isdn_ppp: Compressor not initialized?\n"); return skb_in; } /* Allow for at least 150 % expansion (for now) */ - skb_out = alloc_skb(skb_in->len + skb_in->len/2 + 32 + - skb_headroom(skb_in), GFP_ATOMIC); - if(!skb_out) + skb_out = alloc_skb(skb_in->len + skb_in->len / 2 + 32 + + skb_headroom(skb_in), GFP_ATOMIC); + if (!skb_out) return skb_in; skb_reserve(skb_out, skb_headroom(skb_in)); - ret = (compressor->compress)(stat,skb_in,skb_out,*proto); - if(!ret) { + ret = (compressor->compress)(stat, skb_in, skb_out, *proto); + if (!ret) { dev_kfree_skb(skb_out); return skb_in; } - + dev_kfree_skb(skb_in); *proto = new_proto; return skb_out; } /* - * we received a CCP frame .. + * we received a CCP frame .. * not a clean solution, but we MUST handle a few cases in the kernel */ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, - struct sk_buff *skb,int proto) + struct sk_buff *skb, int proto) { struct ippp_struct *is; struct ippp_struct *mis; int len; struct isdn_ppp_resetparams rsparm; - unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; + unsigned char rsdata[IPPP_RESET_MAXDATABYTES]; printk(KERN_DEBUG "Received CCP frame from peer slot(%d)\n", - lp->ppp_slot); + lp->ppp_slot); if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", - __func__, lp->ppp_slot); + __func__, lp->ppp_slot); return; } is = ippp_table[lp->ppp_slot]; - isdn_ppp_frame_log("ccp-rcv", skb->data, skb->len, 32, is->unit,lp->ppp_slot); + isdn_ppp_frame_log("ccp-rcv", skb->data, skb->len, 32, is->unit, lp->ppp_slot); - if(lp->master) { + if (lp->master) { int slot = ISDN_MASTER_PRIV(lp)->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: slot(%d) out of range\n", - __func__, slot); + __func__, slot); return; - } + } mis = ippp_table[slot]; } else mis = is; - switch(skb->data[0]) { + switch (skb->data[0]) { case CCP_CONFREQ: - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Disable compression here!\n"); - if(proto == PPP_CCP) - mis->compflags &= ~SC_COMP_ON; + if (proto == PPP_CCP) + mis->compflags &= ~SC_COMP_ON; else - is->compflags &= ~SC_LINK_COMP_ON; + is->compflags &= ~SC_LINK_COMP_ON; break; case CCP_TERMREQ: case CCP_TERMACK: - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Disable (de)compression here!\n"); - if(proto == PPP_CCP) - mis->compflags &= ~(SC_DECOMP_ON|SC_COMP_ON); + if (proto == PPP_CCP) + mis->compflags &= ~(SC_DECOMP_ON | SC_COMP_ON); else - is->compflags &= ~(SC_LINK_DECOMP_ON|SC_LINK_COMP_ON); + is->compflags &= ~(SC_LINK_DECOMP_ON | SC_LINK_COMP_ON); break; case CCP_CONFACK: /* if we RECEIVE an ackowledge we enable the decompressor */ - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Enable decompression here!\n"); - if(proto == PPP_CCP) { + if (proto == PPP_CCP) { if (!mis->decompressor) break; mis->compflags |= SC_DECOMP_ON; @@ -2706,11 +2706,11 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, len = (skb->data[2] << 8) | skb->data[3]; len -= 4; - if(proto == PPP_CCP) { + if (proto == PPP_CCP) { /* If a reset Ack was outstanding for this id, then clean up the state engine */ isdn_ppp_ccp_reset_ack_rcvd(mis, skb->data[1]); - if(mis->decompressor && mis->decomp_stat) + if (mis->decompressor && mis->decomp_stat) mis->decompressor-> reset(mis->decomp_stat, skb->data[0], @@ -2722,7 +2722,7 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, } else { isdn_ppp_ccp_reset_ack_rcvd(is, skb->data[1]); - if(is->link_decompressor && is->link_decomp_stat) + if (is->link_decompressor && is->link_decomp_stat) is->link_decompressor-> reset(is->link_decomp_stat, skb->data[0], @@ -2740,12 +2740,12 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, /* Set up reset params for the reset entry */ memset(&rsparm, 0, sizeof(rsparm)); rsparm.data = rsdata; - rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; + rsparm.maxdlen = IPPP_RESET_MAXDATABYTES; /* Isolate data length */ len = (skb->data[2] << 8) | skb->data[3]; len -= 4; - if(proto == PPP_CCP) { - if(mis->compressor && mis->comp_stat) + if (proto == PPP_CCP) { + if (mis->compressor && mis->comp_stat) mis->compressor-> reset(mis->comp_stat, skb->data[0], @@ -2754,7 +2754,7 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, len, &rsparm); } else { - if(is->link_compressor && is->link_comp_stat) + if (is->link_compressor && is->link_comp_stat) is->link_compressor-> reset(is->link_comp_stat, skb->data[0], @@ -2763,9 +2763,9 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, len, &rsparm); } /* Ack the Req as specified by rsparm */ - if(rsparm.valid) { + if (rsparm.valid) { /* Compressor reset handler decided how to answer */ - if(rsparm.rsend) { + if (rsparm.rsend) { /* We should send a Frame */ isdn_ppp_ccp_xmit_reset(is, proto, CCP_RESETACK, rsparm.idval ? rsparm.id @@ -2817,69 +2817,69 @@ static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb) { - struct ippp_struct *mis,*is; + struct ippp_struct *mis, *is; int proto, slot = lp->ppp_slot; unsigned char *data; - if(!skb || skb->len < 3) + if (!skb || skb->len < 3) return; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", - __func__, slot); + __func__, slot); return; - } + } is = ippp_table[slot]; /* Daemon may send with or without address and control field comp */ data = skb->data; - if(!(is->pppcfg & SC_COMP_AC) && data[0] == 0xff && data[1] == 0x03) { + if (!(is->pppcfg & SC_COMP_AC) && data[0] == 0xff && data[1] == 0x03) { data += 2; - if(skb->len < 5) + if (skb->len < 5) return; } - proto = ((int)data[0]<<8)+data[1]; - if(proto != PPP_CCP && proto != PPP_CCPFRAG) + proto = ((int)data[0]<<8) + data[1]; + if (proto != PPP_CCP && proto != PPP_CCPFRAG) return; printk(KERN_DEBUG "Received CCP frame from daemon:\n"); - isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot); + isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit, lp->ppp_slot); if (lp->master) { slot = ISDN_MASTER_PRIV(lp)->ppp_slot; if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { printk(KERN_ERR "%s: slot(%d) out of range\n", - __func__, slot); + __func__, slot); return; - } + } mis = ippp_table[slot]; } else mis = is; if (mis != is) printk(KERN_DEBUG "isdn_ppp: Ouch! Master CCP sends on slave slot!\n"); - - switch(data[2]) { + + switch (data[2]) { case CCP_CONFREQ: - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Disable decompression here!\n"); - if(proto == PPP_CCP) + if (proto == PPP_CCP) is->compflags &= ~SC_DECOMP_ON; else is->compflags &= ~SC_LINK_DECOMP_ON; break; case CCP_TERMREQ: case CCP_TERMACK: - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Disable (de)compression here!\n"); - if(proto == PPP_CCP) - is->compflags &= ~(SC_DECOMP_ON|SC_COMP_ON); + if (proto == PPP_CCP) + is->compflags &= ~(SC_DECOMP_ON | SC_COMP_ON); else - is->compflags &= ~(SC_LINK_DECOMP_ON|SC_LINK_COMP_ON); + is->compflags &= ~(SC_LINK_DECOMP_ON | SC_LINK_COMP_ON); break; case CCP_CONFACK: /* if we SEND an ackowledge we can/must enable the compressor */ - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Enable compression here!\n"); - if(proto == PPP_CCP) { + if (proto == PPP_CCP) { if (!is->compressor) break; 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 break; case CCP_RESETACK: /* If we send a ACK we should reset our compressor */ - if(is->debug & 0x10) + if (is->debug & 0x10) printk(KERN_DEBUG "Reset decompression state here!\n"); printk(KERN_DEBUG "ResetAck from daemon passed by\n"); - if(proto == PPP_CCP) { + if (proto == PPP_CCP) { /* link to master? */ - if(is->compressor && is->comp_stat) + if (is->compressor && is->comp_stat) is->compressor->reset(is->comp_stat, 0, 0, NULL, 0, NULL); - is->compflags &= ~SC_COMP_DISCARD; + is->compflags &= ~SC_COMP_DISCARD; } else { - if(is->link_compressor && is->link_comp_stat) + if (is->link_compressor && is->link_comp_stat) is->link_compressor->reset(is->link_comp_stat, 0, 0, NULL, 0, NULL); - is->compflags &= ~SC_LINK_COMP_DISCARD; + is->compflags &= ~SC_LINK_COMP_DISCARD; } break; case CCP_RESETREQ: @@ -2919,7 +2919,7 @@ int isdn_ppp_register_compressor(struct isdn_ppp_compressor *ipc) { ipc->next = ipc_head; ipc->prev = NULL; - if(ipc_head) { + if (ipc_head) { ipc_head->prev = ipc; } ipc_head = ipc; @@ -2928,11 +2928,11 @@ int isdn_ppp_register_compressor(struct isdn_ppp_compressor *ipc) int isdn_ppp_unregister_compressor(struct isdn_ppp_compressor *ipc) { - if(ipc->prev) + if (ipc->prev) ipc->prev->next = ipc->next; else ipc_head = ipc->next; - if(ipc->next) + if (ipc->next) ipc->next->prev = ipc->prev; ipc->prev = ipc->next = NULL; return 0; @@ -2945,26 +2945,26 @@ static int isdn_ppp_set_compressor(struct ippp_struct *is, struct isdn_ppp_comp_ void *stat; int num = data->num; - if(is->debug & 0x10) - printk(KERN_DEBUG "[%d] Set %s type %d\n",is->unit, - (data->flags&IPPP_COMP_FLAG_XMIT)?"compressor":"decompressor",num); + if (is->debug & 0x10) + printk(KERN_DEBUG "[%d] Set %s type %d\n", is->unit, + (data->flags & IPPP_COMP_FLAG_XMIT) ? "compressor" : "decompressor", num); /* If is has no valid reset state vector, we cannot allocate a decompressor. The decompressor would cause reset transactions sooner or later, and they need that vector. */ - if(!(data->flags & IPPP_COMP_FLAG_XMIT) && !is->reset) { + if (!(data->flags & IPPP_COMP_FLAG_XMIT) && !is->reset) { printk(KERN_ERR "ippp_ccp: no reset data structure - can't" " allow decompression.\n"); return -ENOMEM; } - while(ipc) { - if(ipc->num == num) { + while (ipc) { + if (ipc->num == num) { stat = ipc->alloc(data); - if(stat) { - ret = ipc->init(stat,data,is->unit,0); - if(!ret) { + if (stat) { + ret = ipc->init(stat, data, is->unit, 0); + if (!ret) { printk(KERN_ERR "Can't init (de)compression!\n"); ipc->free(stat); stat = NULL; @@ -2976,32 +2976,32 @@ static int isdn_ppp_set_compressor(struct ippp_struct *is, struct isdn_ppp_comp_ break; } - if(data->flags & IPPP_COMP_FLAG_XMIT) { - if(data->flags & IPPP_COMP_FLAG_LINK) { - if(is->link_comp_stat) + if (data->flags & IPPP_COMP_FLAG_XMIT) { + if (data->flags & IPPP_COMP_FLAG_LINK) { + if (is->link_comp_stat) is->link_compressor->free(is->link_comp_stat); is->link_comp_stat = stat; - is->link_compressor = ipc; + is->link_compressor = ipc; } else { - if(is->comp_stat) + if (is->comp_stat) is->compressor->free(is->comp_stat); is->comp_stat = stat; - is->compressor = ipc; + is->compressor = ipc; } } - else { - if(data->flags & IPPP_COMP_FLAG_LINK) { - if(is->link_decomp_stat) + else { + if (data->flags & IPPP_COMP_FLAG_LINK) { + if (is->link_decomp_stat) is->link_decompressor->free(is->link_decomp_stat); is->link_decomp_stat = stat; - is->link_decompressor = ipc; + is->link_decompressor = ipc; } else { - if(is->decomp_stat) + if (is->decomp_stat) is->decompressor->free(is->decomp_stat); is->decomp_stat = stat; - is->decompressor = ipc; + is->decompressor = ipc; } } return 0; |