亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utils.c

?? 一種AODV實現方法
?? C
字號:
/*               Kernel AODV  v2.0National Institute of Standards and Technology               Luke Klein-Berndt-----------------------------------------------------  Version 2.0 new features:     * Updated to AODV draft version 11     * Managed internet gatewaying     * Monitor wireles signal strength     * Many bug fixes!-----------------------------------------------------Originally based upon MadHoc code. I am notsure how much of it is left anymore, but MadHocproved to be a great starting point.MadHoc was written by - Fredrik Lilieblad,Oskar Mattsson, Petra Nylund, Dan Ouchterlonyand Anders Roxenhag Mail: mad-hoc@flyinglinux.netThis software is Open Source under the GNU General Public Licence.*/#include "utils.h"/****************************************************   utils.h----------------------------------------------------Contains many misc funcations that providebasic functionality.****************************************************/extern u_int32_t g_broadcast_ip;extern u_int32_t g_my_ip;static struct socket *iw_sock;static struct sockaddr_in sin; //the port we are sending from/****************************************************   init_sock----------------------------------------------------Creates a socket for sending out data****************************************************/int init_sock(struct socket *sock, u_int32_t ip, char *dev_name){    int error;    struct ifreq interface;    //set the address we are sending from    memset(&sin,0,sizeof(sin));    sin.sin_family = AF_INET;    sin.sin_addr.s_addr=ip;    sin.sin_port         = htons(AODVPORT);    sock->sk->reuse =1;    sock->sk->allocation = GFP_ATOMIC;    sock->sk->priority = GFP_ATOMIC;    error = sock->ops->bind(sock,(struct sockaddr*)&sin,sizeof(struct sockaddr_in));    strncpy(interface.ifr_ifrn.ifrn_name,dev_name,IFNAMSIZ);    if (sock_setsockopt(sock,SOL_SOCKET,SO_BINDTODEVICE, (char *) &interface, sizeof(interface))<0)    {    }    if (error<0)    {        printk(KERN_ERR "Kernel AODV: Error, %d  binding socket. This means that some other \n",error);        printk(KERN_ERR "        daemon is (or was a short time axgo) using port %i.\n",AODVPORT);        return 0;    }    return 0;}/****************************************************   close_sock----------------------------------------------------Closes the socket****************************************************/void close_sock(void){    struct interface_list_entry *tmp_interface,*dead_interface;    tmp_interface=find_first_interface_entry();    while(tmp_interface!=NULL)    {        sock_release(tmp_interface->sock);        dead_interface=tmp_interface;        tmp_interface=tmp_interface->next;        kfree(dead_interface);    }}void init_iw_sock(void){    int error;    error = sock_create(AF_INET,SOCK_DGRAM,0,&iw_sock);    if (error<0)    {        printk(KERN_ERR "Error during creation of socket; terminating, %d\n",error);    }}void close_iw_sock(void){    sock_release(iw_sock);}int set_spy(){    int errno;    int			i;    int			nbr;		/* Number of valid addresses */    mm_segment_t oldfs;    struct neighbor_list_entry *tmp_neigh;    struct interface_list_entry *tmp_interface;    struct sockaddr iw_sa[IW_MAX_SPY];    struct iwreq		wrq;    tmp_interface=find_first_interface_entry();    while (tmp_interface!=NULL)    {        if ((tmp_interface->dev->get_wireless_stats!=NULL) && (tmp_interface->dev->do_ioctl!=NULL))        {            i=0;            tmp_neigh=find_first_neighbor_list_entry();            while ((tmp_neigh!=NULL) && ( i<IW_MAX_SPY))            {                if (tmp_interface->dev==tmp_neigh->dev)                {                    memcpy((char *) &(iw_sa[i].sa_data), (char *) &(tmp_neigh->hw_addr),sizeof(struct sockaddr));                    i++;                    tmp_neigh->link=101;                }                tmp_neigh=tmp_neigh->next;            }            strncpy(wrq.ifr_name, tmp_interface->dev->name, IFNAMSIZ);            wrq.u.data.pointer = (caddr_t) &(iw_sa);            wrq.u.data.length = i;            wrq.u.data.flags = 0;            oldfs = get_fs();            set_fs(KERNEL_DS);            errno=tmp_interface->dev->do_ioctl(tmp_interface->dev, (struct ifreq * ) &wrq,SIOCSIWSPY);            set_fs(oldfs);#ifndef NO_ERRORS            if (errno<0)                printk( "Error with SIOCSIWSPY: %d\n", errno);#endif        }        tmp_interface=tmp_interface->next;    }}int get_range_info(struct net_device *dev,char *		ifname, struct iw_range *	range){    struct iwreq		wrq;    char			buffer[sizeof(struct iw_range) * 2];	/* Large enough */    /* Cleanup */    memset(buffer, 0, sizeof(range));    strcpy(wrq.ifr_name, ifname);    wrq.u.data.pointer = (caddr_t) buffer;    wrq.u.data.length = 0;    wrq.u.data.flags = 0;    if(dev->do_ioctl(dev, (struct ifreq * ) &wrq,SIOCGIWRANGE) < 0)        return(-1);    /* Copy stuff at the right place, ignore extra */    memcpy((char *) range, buffer, sizeof(struct iw_range));    return(0);}void get_wireless_stats(){    int n,i,has_range=0;    char		buffer[(sizeof(struct iw_quality) +	sizeof(struct sockaddr)) * IW_MAX_SPY];    u_int8_t temp;    struct iwreq		wrq;    struct neighbor_list_entry *tmp_neigh;    struct interface_list_entry *tmp_interface;    struct sockaddr 	hwa[IW_MAX_SPY];    struct iw_quality 	qual[IW_MAX_SPY];    struct iw_range	range;    tmp_interface=find_first_interface_entry();    while (tmp_interface!=NULL)    {        if ((tmp_interface->dev->get_wireless_stats!=NULL) && (tmp_interface->dev->do_ioctl!=NULL))        {            strncpy(wrq.ifr_name,tmp_interface->dev->name , IFNAMSIZ);            wrq.u.data.pointer = (caddr_t) buffer;            wrq.u.data.length = 0;            wrq.u.data.flags = 0;            tmp_interface->dev->do_ioctl(tmp_interface->dev,(struct ifreq * ) &wrq,SIOCGIWSPY );            if(get_range_info(tmp_interface->dev, tmp_interface->dev->name , &(range)) >= 0)                has_range = 1;            n = wrq.u.data.length;            memcpy(hwa, buffer, n * sizeof(struct sockaddr));            memcpy(qual, buffer + n*sizeof(struct sockaddr), n*sizeof(struct iw_quality));            for(i = 0; i < n; i++)            {                if(has_range && (qual[i].level != 0))                {                    if (range.max_qual.qual!=0)                    {                        temp= (u_int8_t)   ((float) (qual[i].qual) / (float) (range.max_qual.qual) *100);                        update_link_by_hw(hwa[i].sa_data,temp);                    }                }                else                {                    update_link_by_hw(hwa[i].sa_data,qual[i].qual);                }            }        }        tmp_interface=tmp_interface->next;    }}/****************************************************   send_datagram----------------------------------------------------Used to send out a UDP packet through asocket****************************************************/int local_broadcast(u_int8_t ttl, void *data, int datalen){    struct interface_list_entry *tmp_interface;    struct msghdr msg;    struct iovec iov;    u_int64_t curr_time;    mm_segment_t oldfs;    int len=0;    curr_time=getcurrtime();    if (ttl == 0 )        return 0;    memset(&sin,0,sizeof(sin));    sin.sin_family = AF_INET;    sin.sin_addr.s_addr= g_broadcast_ip;    sin.sin_port         = htons((unsigned short)AODVPORT);    //define the message we are going to be sending out    msg.msg_name     = (void *) &(sin);    msg.msg_namelen  = sizeof(sin);    msg.msg_iov  = &iov;    msg.msg_iovlen   = 1;    msg.msg_control  = NULL;    msg.msg_controllen = 0;    msg.msg_flags    = 0;    msg.msg_iov->iov_len = (__kernel_size_t) datalen;    msg.msg_iov->iov_base = (char*) data;    tmp_interface=find_first_interface_entry();    while(tmp_interface!=NULL)    {        tmp_interface->sock->sk->broadcast=1;        tmp_interface->sock->sk->protinfo.af_inet.ttl=ttl;        tmp_interface->last_broadcast=curr_time;        oldfs = get_fs();        set_fs(KERNEL_DS);        len = sock_sendmsg(tmp_interface->sock,&msg,datalen);	   #ifndef NO_ERROR        if (len<0)            printk("LOCAL_BROADCAST: Error sending! err no: %d,on interface: %s\n",len,tmp_interface->dev->name);	    #endif        set_fs(oldfs);        tmp_interface=tmp_interface->next;    }    return len;}int send_message(u_int32_t dst_ip,u_int8_t ttl, void *data, int datalen){    mm_segment_t oldfs;    struct msghdr msg;    struct interface_list_entry *tmp_interface;    struct route_table_entry *tmp_route;    struct iovec iov;    u_int64_t curr_time;    int   len;#ifdef TRACE    printk("SEND_DATAGRAM: Sending datagram out! \n");#endif    memset(&sin,0,sizeof(sin));    sin.sin_family = AF_INET;    sin.sin_addr.s_addr= dst_ip;    sin.sin_port         = htons((unsigned short)AODVPORT);    //define the message we are going to be sending out    msg.msg_name     = (void *) &(sin);    msg.msg_namelen  = sizeof(sin);    msg.msg_iov  = &iov;    msg.msg_iovlen   = 1;    msg.msg_control  = NULL;    msg.msg_controllen = 0;    msg.msg_flags    = 0;    msg.msg_iov->iov_len =  datalen;    msg.msg_iov->iov_base = (char*) data;#ifdef TRACE    printk("SEND_DATAGRAM: constructed \n");#endif    if (ttl == 0 )        return 0;    curr_time=getcurrtime();    tmp_route=find_route_table_entry(dst_ip);    tmp_interface=find_interface_by_dev(tmp_route->dev);    if (tmp_interface==NULL)    {	#ifndef NO_ERRORS        printk("SEND_DATAGRAM: Error sending! Unable to find interface!\n");	 #endif        return 1;    }    tmp_interface->sock->sk->broadcast=0;    tmp_interface->sock->sk->protinfo.af_inet.ttl=ttl;    tmp_interface->last_broadcast=curr_time;    oldfs = get_fs();    set_fs(KERNEL_DS);    len = sock_sendmsg(tmp_interface->sock,&msg,datalen);    if (len<0)    {        printk("SEND_MESSAGE: Error sending! err no: %d, Dst: %s\n",len,inet_ntoa(dst_ip));    }    set_fs(oldfs);    return 0;}/****************************************************   getcurrtime----------------------------------------------------Returns the current time****************************************************/u_int64_t getcurrtime(){    struct timeval tv;        u_int64_t      result;    do_gettimeofday(&tv);	//This is a fix for an error that occurs on ARM Linux Kernels because they do 64bits differently	//Thanks to S. Peter Li for coming up with this fix!    result = (u_int64_t)tv.tv_usec;    do_div(result, 1000);    return ((u_int64_t)tv.tv_sec) * 1000 + result;}/****************************************************   inet_ntoa----------------------------------------------------Converts a IP address repersented in a 32 bitunsigned int into a string****************************************************/char *inet_ntoa(__u32 ina){    static char buf[4*sizeof "123"];    unsigned char *ucp = (unsigned char *)&ina;    sprintf(buf, "%d.%d.%d.%d",            ucp[0] & 0xff,            ucp[1] & 0xff,            ucp[2] & 0xff,            ucp[3] & 0xff);    return buf;}/* tests to see if an address falls in the range of the Ad Hoc Subnet */int adhoc_subnet_test( u_int32_t ina){    unsigned char *ucp = (unsigned char *)&ina;    unsigned char *uco = (unsigned char *)&g_aodv_subnet;    if (g_aodv_subnet==0)        return 1;    if ((!(uco[0] & 0xff) || ((uco[0] & 0xff) == (ucp[0] & 0xff))) &&            (!(uco[1] & 0xff) || ((uco[1] & 0xff) == (ucp[1] & 0xff))) &&            (!(uco[2] & 0xff) || ((uco[2] & 0xff) == (ucp[2] & 0xff))) &&            (!(uco[3] & 0xff) || ((uco[3] & 0xff) == (ucp[3] & 0xff))))        return 1;    else        return 0;}int seq_less_or_equal(u_int32_t seq_one,u_int32_t seq_two){    int *comp_seq_one = &seq_one;    int *comp_seq_two = &seq_two;    if (  ( *comp_seq_one - *comp_seq_two ) > 0 )    {        return 0;    }    else        return 1;}int seq_greater(u_int32_t seq_one,u_int32_t seq_two){    int *comp_seq_one = &seq_one;    int *comp_seq_two = &seq_two;    if (  ( *comp_seq_one - *comp_seq_two ) < 0 )        return 0;    else        return 1;}/****************************************************   inet_aton----------------------------------------------------Converts a string into a 32-bit unsigned int****************************************************/int inet_aton(const char *cp, __u32 *addr){    unsigned int val;    int                     base,    n;    char            c;    u_int           parts[4];    u_int      *pp = parts;    for (;;)    {        //Collect number up to ``.''. Values are specified as for C:        // 0x=hex, 0=octal, other=decimal.        val = 0;        base = 10;        if (*cp == '0')        {            if (*++cp == 'x' || *cp == 'X')                base = 16, cp++;            else                base = 8;        }        while ((c = *cp) != '\0')        {            if (isascii(c) && isdigit(c))            {                val = (val * base) + (c - '0');                cp++;                continue;            }            if (base == 16 && isascii(c) && isxdigit(c))            {                val = (val << 4) +                      (c + 10 - (islower(c) ? 'a' : 'A'));                cp++;                continue;            }            break;        }        if (*cp == '.')        {            // Internet format: a.b.c.d a.b.c       (with c treated as            // 16-bits) a.b         (with b treated as 24 bits)            if (pp >= parts + 3 || val > 0xff)                return (0);            *pp++ = val, cp++;        }        else            break;    }    // Check for trailing characters.    if (*cp && (!isascii(*cp) || !isspace(*cp)))        return (0);    // Concoct the address according to the number of parts specified.    n = pp - parts + 1;    switch (n)    {    case 1:                 // a -- 32 bits        break;    case 2:                 //a.b -- 8.24 bits        if (val > 0xffffff)            return (0);        val |= parts[0] << 24;        break;    case 3:                 //a.b.c -- 8.8.16 bits        if (val > 0xffff)            return (0);        val |= (parts[0] << 24) | (parts[1] << 16);        break;    case 4:                 // a.b.c.d -- 8.8.8.8 bits        if (val > 0xff)            return (0);        val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);        break;    }    if (addr)        *addr= htonl(val);    return (1);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片欧美色图| www.亚洲色图.com| 不卡视频在线看| 欧美日韩精品一区二区天天拍小说| 欧美一二区视频| 国产精品对白交换视频| 精品系列免费在线观看| 欧美三级蜜桃2在线观看| 久久无码av三级| 日韩av网站免费在线| 欧美调教femdomvk| 中文字幕亚洲视频| 风间由美中文字幕在线看视频国产欧美| 欧美日韩成人高清| 亚洲永久免费av| 91亚洲精品一区二区乱码| 国产亚洲精品超碰| 激情五月播播久久久精品| 51精品秘密在线观看| 亚洲高清三级视频| 欧美伊人久久大香线蕉综合69| 视频一区视频二区中文| 91麻豆国产福利精品| 国产精品二区一区二区aⅴ污介绍| 国产在线一区二区| 欧美不卡一区二区三区| 日韩成人一级大片| 欧美一区二区三区视频在线| 亚洲一级二级三级| 欧美女孩性生活视频| 亚洲国产欧美在线| 欧美日韩成人一区二区| 亚洲成人精品一区| 8x福利精品第一导航| 日本亚洲免费观看| 欧美xingq一区二区| 韩国女主播成人在线观看| 久久色在线视频| 国产不卡在线视频| 自拍偷在线精品自拍偷无码专区| 成人97人人超碰人人99| 亚洲欧美日韩国产综合在线| 日本高清无吗v一区| 一区二区三区加勒比av| 欧美中文字幕一区| 亚洲不卡一区二区三区| 日韩精品一区二| 国产二区国产一区在线观看| 一区二区中文字幕在线| 久久理论电影网| 成人精品小蝌蚪| 亚洲一区二区欧美日韩| 制服丝袜av成人在线看| 狠狠色丁香婷综合久久| 一区精品在线播放| 欧美一区二区三区在线观看 | 另类成人小视频在线| 欧美va亚洲va香蕉在线| 成人午夜伦理影院| 同产精品九九九| 精品欧美乱码久久久久久1区2区| 成人黄色综合网站| 视频一区在线播放| 国产精品久久久久7777按摩| 欧美日韩的一区二区| 国产不卡在线一区| 日一区二区三区| 亚洲国产精品传媒在线观看| 在线不卡a资源高清| 粉嫩欧美一区二区三区高清影视| 亚洲一级不卡视频| 亚洲国产精品精华液ab| 91麻豆精品国产91久久久久久| 成人丝袜视频网| 青青草一区二区三区| 中文字幕一区二区三区视频| 91精品久久久久久久91蜜桃| 91在线视频免费91| 国产精品正在播放| 日韩激情视频网站| 樱桃视频在线观看一区| 久久精品一区二区三区四区| 欧美日韩久久不卡| 99久久99久久精品免费看蜜桃| 久久国产乱子精品免费女| 亚洲黄色小说网站| 国产精品电影院| 久久综合给合久久狠狠狠97色69| 欧美色图在线观看| 99国产精品视频免费观看| 国产精品一区一区三区| 另类欧美日韩国产在线| 亚洲综合偷拍欧美一区色| 国产精品欧美综合在线| 久久久夜色精品亚洲| 日韩欧美成人激情| 91精品国产一区二区三区蜜臀| 在线免费观看成人短视频| 99久久99精品久久久久久| 国产盗摄视频一区二区三区| 日本va欧美va欧美va精品| 亚洲成人激情综合网| 亚洲影视在线播放| 亚洲激情图片小说视频| 亚洲男人天堂av| 亚洲欧洲综合另类| 一区二区三区中文在线观看| 亚洲欧美日韩电影| 中文字幕综合网| 亚洲四区在线观看| 亚洲欧洲精品一区二区三区不卡| 久久综合狠狠综合久久激情| 精品国产自在久精品国产| 91精品国产丝袜白色高跟鞋| 91麻豆精品国产91久久久使用方法| 欧美日韩三级在线| 欧美男生操女生| 日韩欧美国产小视频| 久久综合精品国产一区二区三区 | 国产成人h网站| 国产经典欧美精品| 成人性生交大片免费看视频在线| 春色校园综合激情亚洲| 97se亚洲国产综合在线| 在线免费观看不卡av| 制服丝袜中文字幕亚洲| 欧美成人精品福利| 日韩国产在线一| 免费高清视频精品| 成人免费看的视频| 一区在线中文字幕| 久久99精品一区二区三区| 国产精品麻豆一区二区 | 亚洲国产成人porn| 日本中文字幕不卡| 国产一区二区三区av电影| 成人app在线观看| 在线观看日韩高清av| 日韩欧美一级在线播放| 国产女人aaa级久久久级 | 欧美色涩在线第一页| 日韩欧美亚洲国产精品字幕久久久 | 不卡免费追剧大全电视剧网站| 色婷婷激情一区二区三区| 制服丝袜亚洲精品中文字幕| 久久久精品免费观看| 亚洲另类在线一区| 免费美女久久99| av中文字幕一区| 91精品久久久久久久久99蜜臂| 欧美国产一区二区在线观看| 亚洲与欧洲av电影| 国产大片一区二区| 欧美日韩国产区一| 欧美经典一区二区| 青青青伊人色综合久久| aa级大片欧美| 精品久久久久久久久久久久久久久久久 | 国产欧美va欧美不卡在线| 亚洲高清在线视频| 成人一区二区三区视频在线观看| 欧美影视一区在线| 国产精品毛片久久久久久久| 美女脱光内衣内裤视频久久网站| 91在线精品一区二区| 久久伊99综合婷婷久久伊| 性欧美疯狂xxxxbbbb| 99久久久国产精品免费蜜臀| 久久综合色8888| 蜜臀91精品一区二区三区 | 欧美电影免费观看高清完整版在线| 18欧美乱大交hd1984| 狠狠色综合日日| 日韩一区二区三区三四区视频在线观看 | 久久成人免费日本黄色| 欧美中文一区二区三区| 国产精品久久久久永久免费观看 | 性做久久久久久免费观看 | 高清国产一区二区三区| 欧美成va人片在线观看| 天堂成人免费av电影一区| 在线一区二区三区四区五区| 国产精品久久午夜| 福利一区福利二区| 久久蜜臀中文字幕| 国产真实乱子伦精品视频| 欧美一级日韩一级| 日韩国产高清在线| 欧美日本一区二区| 偷拍一区二区三区| 91精品国产高清一区二区三区蜜臀 | 蜜臀精品久久久久久蜜臀 | 欧美喷潮久久久xxxxx| 一区二区三区成人在线视频| 一本色道久久综合精品竹菊 | 日本一区免费视频| 成人爽a毛片一区二区免费| 欧美激情一区二区三区蜜桃视频| 国产精品一区二区在线观看不卡| 久久久精品国产99久久精品芒果|