diff options
| author | Yuval Adam <_@yuv.al> | 2017-08-30 08:25:59 +0000 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2017-08-30 08:25:59 +0000 |
| commit | 8e4bff4cab0ddac6060645b0715210484d02ff40 (patch) | |
| tree | 3a5c3024371a04692a3a6d9974d001cdff8ebf84 /drivers/net/bih/voslist.h | |
Diffstat (limited to 'drivers/net/bih/voslist.h')
| -rw-r--r-- | drivers/net/bih/voslist.h | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/drivers/net/bih/voslist.h b/drivers/net/bih/voslist.h new file mode 100644 index 00000000..45e5584d --- /dev/null +++ b/drivers/net/bih/voslist.h @@ -0,0 +1,249 @@ +/* + * Bump in the Host (BIH) + * http://code.google.com/p/bump-in-the-host/source/ + * ---------------------------------------------------------- + * + * Copyrighted (C) 2010,2011 by the China Mobile Communications + * Corporation <bih.cmcc@gmail.com>; + * See the COPYRIGHT file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ +#ifndef _VOSLIST_H +#define _VOSLIST_H +enum _listnode_status +{ + LISTNODE_STATUS_ENABLE, + LISTNODE_STATUS_DISABLE +}; + +struct listnode +{ + struct listnode *next; + struct listnode *prev; + unsigned int key; + char status; + void *data; + int datalen; + unsigned int datasp; +}; + +#define SHOW2BUF_DEF \ + static char buff[1000],*p = NULL; \ + int ret,len,size; \ + +#define SHOW2BUF_INIT() \ +do \ +{ \ + ret=0; \ + if(p&&p!=buff) \ + vfree(p); \ + size=sizeof(buff)-1; \ + len=0; \ + buff[0]=0; \ + p=buff; \ +} \ +while(0) + +#define SHOW2BUF_RET return(p) + +#define SHOW2BUF(format,...) \ +do \ +{ \ + ret=snprintf(p+len,size-len,format,##__VA_ARGS__); \ + if (ret < 0 || ret >= (size-len)) \ + { \ + while (1) \ + { \ + p=vrealloc(p,2*size+1,size,p!=buff); \ + if(!p) \ + { \ + lprintf(0,"vrealloc error\n"); \ + break; \ + } \ + size*=2; \ + ret=snprintf(p+len,size-len,format,##__VA_ARGS__); \ + if (ret > -1 && ret < (size-len)) \ + break; \ + } \ + } \ + len+=ret; \ + if(p) \ + *(p+len)=0; \ +} \ +while(0) + +#define lprintf(level,format,...) \ +do \ +{ \ + if(level==0) \ + printk("%s(%d)%s: "format,__FILE__,__LINE__,(char *)__FUNCTION__,##__VA_ARGS__ ); \ + else \ + printk((format),##__VA_ARGS__ ); \ +} \ +while(0) +#define vmalloc(size) kmalloc((size),GFP_KERNEL) +#define vfree kfree + +#define PKG_GET_STRING(val, cp) \ +do \ +{ \ + while(*(cp)) \ + *(val)++=*(cp)++; \ + *(val)++=0; \ +} \ +while(0) + +#define PKG_GET_BYTE(val, cp) ((val) = *(cp)++) + +#define PKG_GET_SHORT(val, cp) \ +do \ +{ \ + unsigned short Xv; \ + Xv = (*(cp)++) << 8; \ + Xv |= *(cp)++; \ + (val) = Xv; \ +} \ +while(0) + +#define PKG_GET_NETSHORT(val, cp) \ +do \ +{ \ + unsigned char *Xvp; \ + unsigned short Xv; \ + Xvp = (unsigned char *) &Xv; \ + *Xvp++ = *(cp)++; \ + *Xvp++ = *(cp)++; \ + (val) = Xv; \ +} \ +while(0) + +#define PKG_GET_LONG(val, cp) \ +do \ +{ \ + unsigned long Xv; \ + Xv = (*(cp)++) << 24; \ + Xv |= (*(cp)++) << 16; \ + Xv |= (*(cp)++) << 8; \ + Xv |= *(cp)++; \ + (val) = Xv; \ +} \ +while(0) + +#define PKG_GET_NETLONG(val, cp) \ +do \ +{ \ + unsigned char *Xvp; \ + unsigned long Xv; \ + Xvp = (unsigned char *) &Xv; \ + *Xvp++ = *(cp)++; \ + *Xvp++ = *(cp)++; \ + *Xvp++ = *(cp)++; \ + *Xvp++ = *(cp)++; \ + (val) = Xv; \ +} \ +while(0) + +#define PKG_PUT_BUF(val, len, cp) \ +do \ +{ \ + memcpy((cp),(val),(len)); \ + (cp)+=(len); \ +} \ +while(0) + +#define PKG_PUT_STRING(val, cp) \ +do \ +{ \ + while(*(val)) \ + *(cp)++=*(val)++; \ + *(cp)++=0; \ +} \ +while(0) + +#define PKG_PUT_BYTE(val, cp) (*(cp)++ = (unsigned char)(val)) + +#define PKG_PUT_SHORT(val, cp) \ +do \ +{ \ + unsigned short Xv; \ + Xv = (unsigned short)(val); \ + *(cp)++ = (unsigned char)(Xv >> 8); \ + *(cp)++ = (unsigned char)Xv; \ +} \ +while(0) + +#define PKG_PUT_NETSHORT(val, cp) \ +do \ +{ \ + unsigned char *Xvp; \ + unsigned short Xv = (unsigned short)(val); \ + Xvp = (unsigned char *)&Xv; \ + *(cp)++ = *Xvp++; \ + *(cp)++ = *Xvp++; \ +} \ +while(0) + +#define PKG_PUT_LONG(val, cp) \ +do \ +{ \ + unsigned long Xv; \ + Xv = (unsigned long)(val); \ + *(cp)++ = (unsigned char)(Xv >> 24); \ + *(cp)++ = (unsigned char)(Xv >> 16); \ + *(cp)++ = (unsigned char)(Xv >> 8); \ + *(cp)++ = (unsigned char)Xv; \ +} \ +while(0) + +#define PKG_PUT_NETLONG(val, cp) \ +do \ +{ \ + unsigned char *Xvp; \ + unsigned long Xv = (unsigned long)(val); \ + Xvp = (unsigned char *)&Xv; \ + *(cp)++ = *Xvp++; \ + *(cp)++ = *Xvp++; \ + *(cp)++ = *Xvp++; \ + *(cp)++ = *Xvp++; \ +} \ +while(0) + +int inet_pton4(char *src,unsigned char *dst); +int inet_pton6(char *src,unsigned char *dst); +char *inet_ntop4(unsigned char *src, char *dst, size_t size); +char *inet_ntop6(unsigned char *src, char *dst, size_t size); +unsigned int sk_inet_addr(char* ip_str); +char *buff2String(char *buff,int bufflen); +int msg_field2(char *linebuf,int linelen,int num,char **field,int *flen,char gech); +void *vrealloc(void *ptr,int newsize,int oldsize,char freeflag); +int listnode_tj(struct listnode *head); +void *listnode_pop(struct listnode **head); +int listnode_free(struct listnode *node,void (*func)(void *)); +int listnode_clear(struct listnode **head,void (*func)(void *)); +void listnode_show(struct listnode *head); +struct listnode *listnode_find(struct listnode *head,unsigned int key); +struct listnode *listnode_search(struct listnode *head,void *data,int len,int (*func)(void *,void *,int)); +struct listnode *listnode_match(struct listnode *head,void *data,int len,int (*func)(void *,void *,int)); +int listnode_insert(struct listnode **head,struct listnode *node); +struct listnode *listnode_uninsert(struct listnode **head,struct listnode *node); +struct listnode *listnode_uninsert2(struct listnode **head,unsigned int key); +struct listnode *listnode_add(struct listnode **head,unsigned int key,void *data,int datalen); +int listnode_del(struct listnode **head,unsigned int key,void (*func)(void *)); +struct listnode *listnode_tail(struct listnode **head,void *data,int datalen); +int listnode_join(struct listnode **head,struct listnode **list); + +#endif |
