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

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

?? dhcp.c

?? 包含lwip這個精簡IP協議棧的ucos源代碼.
?? C
?? 第 1 頁 / 共 4 頁
字號:
    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_unfold_reply(): could not allocate dhcp->msg_in\n"));    mem_free((void *)dhcp->options_in);    dhcp->options_in = NULL;    return ERR_MEM;  }  ptr = (u8_t *)dhcp->msg_in;  /* proceed through struct dhcp_msg */  for (i = 0; i < sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN; i++)  {    *ptr++ = ((u8_t *)p->payload)[j++];    /* reached end of pbuf? */    if (j == p->len)    {      /* proceed to next pbuf in chain */      p = p->next;      j = 0;    }  }  LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_unfold_reply(): copied %u bytes into dhcp->msg_in[]\n", i));  if (dhcp->options_in != NULL) {    ptr = (u8_t *)dhcp->options_in;    /* proceed through options */    for (i = 0; i < dhcp->options_in_len; i++) {      *ptr++ = ((u8_t *)p->payload)[j++];      /* reached end of pbuf? */      if (j == p->len) {        /* proceed to next pbuf in chain */        p = p->next;        j = 0;      }    }    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_unfold_reply(): copied %u bytes to dhcp->options_in[]\n", i));  }  return ERR_OK;}/** * Free the incoming DHCP message including contiguous copy of * its DHCP options. * */static void dhcp_free_reply(struct dhcp *dhcp){  if (dhcp->msg_in != NULL) {    mem_free((void *)dhcp->msg_in);    dhcp->msg_in = NULL;  }  if (dhcp->options_in) {    mem_free((void *)dhcp->options_in);    dhcp->options_in = NULL;    dhcp->options_in_len = 0;  }  LWIP_DEBUGF(DHCP_DEBUG, ("dhcp_free_reply(): free'd\n"));}/** * If an incoming DHCP message is in response to us, then trigger the state machine */static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port){  struct netif *netif = (struct netif *)arg;  struct dhcp *dhcp = netif->dhcp;  struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload;  u8_t *options_ptr;  u8_t msg_type;  u8_t i;  LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_recv(pbuf = %p) from DHCP server %u.%u.%u.%u port %u\n", p,    (unsigned int)(ntohl(addr->addr) >> 24 & 0xff), (unsigned int)(ntohl(addr->addr) >> 16 & 0xff),    (unsigned int)(ntohl(addr->addr) >>  8 & 0xff), (unsigned int)(ntohl(addr->addr) & 0xff), port));  LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("pbuf->len = %u\n", p->len));  LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("pbuf->tot_len = %u\n", p->tot_len));  /* prevent warnings about unused arguments */  (void)pcb; (void)addr; (void)port;  dhcp->p = p;  /* TODO: check packet length before reading them */  if (reply_msg->op != DHCP_BOOTREPLY) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("not a DHCP reply message, but type %u\n", reply_msg->op));    pbuf_free(p);    dhcp->p = NULL;    return;  }  /* iterate through hardware address and match against DHCP message */  for (i = 0; i < netif->hwaddr_len; i++) {    if (netif->hwaddr[i] != reply_msg->chaddr[i]) {      LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("netif->hwaddr[%u]==%02x != reply_msg->chaddr[%u]==%02x\n",        i, netif->hwaddr[i], i, reply_msg->chaddr[i]));      pbuf_free(p);      dhcp->p = NULL;      return;    }  }  /* match transaction ID against what we expected */  if (ntohl(reply_msg->xid) != dhcp->xid) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("transaction id mismatch\n"));    pbuf_free(p);    dhcp->p = NULL;    return;  }  /* option fields could be unfold? */  if (dhcp_unfold_reply(dhcp) != ERR_OK) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("problem unfolding DHCP message - too short on memory?\n"));    pbuf_free(p);    dhcp->p = NULL;    return;  }  LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n"));  /* obtain pointer to DHCP message type */  options_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_MESSAGE_TYPE);  if (options_ptr == NULL) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_OPTION_MESSAGE_TYPE option not found\n"));    pbuf_free(p);    dhcp->p = NULL;    return;  }  /* read DHCP message type */  msg_type = dhcp_get_option_byte(options_ptr + 2);  /* message type is DHCP ACK? */  if (msg_type == DHCP_ACK) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_ACK received\n"));    /* in requesting state? */    if (dhcp->state == DHCP_REQUESTING) {      dhcp_handle_ack(netif);      dhcp->request_timeout = 0;#if DHCP_DOES_ARP_CHECK      /* check if the acknowledged lease address is already in use */      dhcp_check(netif);#else      /* bind interface to the acknowledged lease address */      dhcp_bind(netif);#endif    }    /* already bound to the given lease address? */    else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) {      dhcp->request_timeout = 0;      dhcp_bind(netif);    }  }  /* received a DHCP_NAK in appropriate state? */  else if ((msg_type == DHCP_NAK) &&    ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) ||     (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING  ))) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_NAK received\n"));    dhcp->request_timeout = 0;    dhcp_handle_nak(netif);  }  /* received a DHCP_OFFER in DHCP_SELECTING state? */  else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_OFFER received in DHCP_SELECTING state\n"));    dhcp->request_timeout = 0;    /* remember offered lease */    dhcp_handle_offer(netif);  }  pbuf_free(p);  dhcp->p = NULL;}static err_t dhcp_create_request(struct netif *netif){  struct dhcp *dhcp = netif->dhcp;  u16_t i;  LWIP_ASSERT("dhcp_create_request: dhcp->p_out == NULL", dhcp->p_out == NULL);  LWIP_ASSERT("dhcp_create_request: dhcp->msg_out == NULL", dhcp->msg_out == NULL);  dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM);  if (dhcp->p_out == NULL) {    LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_create_request(): could not allocate pbuf\n"));    return ERR_MEM;  }  /* give unique transaction identifier to this request */  dhcp->xid = xid++;  dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload;  dhcp->msg_out->op = DHCP_BOOTREQUEST;  /* TODO: make link layer independent */  dhcp->msg_out->htype = DHCP_HTYPE_ETH;  /* TODO: make link layer independent */  dhcp->msg_out->hlen = DHCP_HLEN_ETH;  dhcp->msg_out->hops = 0;  dhcp->msg_out->xid = htonl(dhcp->xid);  dhcp->msg_out->secs = 0;  dhcp->msg_out->flags = 0;  dhcp->msg_out->ciaddr.addr = netif->ip_addr.addr;  dhcp->msg_out->yiaddr.addr = 0;  dhcp->msg_out->siaddr.addr = 0;  dhcp->msg_out->giaddr.addr = 0;  for (i = 0; i < DHCP_CHADDR_LEN; i++) {    /* copy netif hardware address, pad with zeroes */    dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;  }  for (i = 0; i < DHCP_SNAME_LEN; i++) dhcp->msg_out->sname[i] = 0;  for (i = 0; i < DHCP_FILE_LEN; i++) dhcp->msg_out->file[i] = 0;  dhcp->msg_out->cookie = htonl(0x63825363UL);  dhcp->options_out_len = 0;  /* fill options field with an incrementing array (for debugging purposes) */  for (i = 0; i < DHCP_OPTIONS_LEN; i++) dhcp->msg_out->options[i] = i;  return ERR_OK;}static void dhcp_delete_request(struct netif *netif){  struct dhcp *dhcp = netif->dhcp;  LWIP_ASSERT("dhcp_free_msg: dhcp->p_out != NULL", dhcp->p_out != NULL);  LWIP_ASSERT("dhcp_free_msg: dhcp->msg_out != NULL", dhcp->msg_out != NULL);  pbuf_free(dhcp->p_out);  dhcp->p_out = NULL;  dhcp->msg_out = NULL;}/** * Add a DHCP message trailer * * Adds the END option to the DHCP message, and if * necessary, up to three padding bytes. */static void dhcp_option_trailer(struct dhcp *dhcp){  LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL);  LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN);  dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END;  /* packet is too small, or not 4 byte aligned? */  while ((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) {    /* LWIP_DEBUGF(DHCP_DEBUG, ("dhcp_option_trailer: dhcp->options_out_len=%u, DHCP_OPTIONS_LEN=%u", dhcp->options_out_len, DHCP_OPTIONS_LEN)); */    LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN);    /* add a fill/padding byte */    dhcp->msg_out->options[dhcp->options_out_len++] = 0;  }}/** * Find the offset of a DHCP option inside the DHCP message. * * @param client DHCP client * @param option_type * * @return a byte offset into the UDP message where the option was found, or * zero if the given option was not found. */static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type){  u8_t overload = DHCP_OVERLOAD_NONE;  /* options available? */  if ((dhcp->options_in != NULL) && (dhcp->options_in_len > 0)) {    /* start with options field */    u8_t *options = (u8_t *)dhcp->options_in;    u16_t offset = 0;    /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */    while ((offset < dhcp->options_in_len) && (options[offset] != DHCP_OPTION_END)) {      /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%u, q->len=%u", msg_offset, q->len)); */      /* are the sname and/or file field overloaded with options? */      if (options[offset] == DHCP_OPTION_OVERLOAD) {        LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("overloaded message detected\n"));        /* skip option type and length */        offset += 2;        overload = options[offset++];      }      /* requested option found */      else if (options[offset] == option_type) {        LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("option found at offset %u in options\n", offset));        return &options[offset];      /* skip option */      } else {         LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %u in options\n", options[offset]));        /* skip option type */        offset++;        /* skip option length, and then length bytes */        offset += 1 + options[offset];      }    }    /* is this an overloaded message? */    if (overload != DHCP_OVERLOAD_NONE) {      u16_t field_len;      if (overload == DHCP_OVERLOAD_FILE) {        LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("overloaded file field\n"));        options = (u8_t *)&dhcp->msg_in->file;        field_len = DHCP_FILE_LEN;      } else if (overload == DHCP_OVERLOAD_SNAME) {        LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("overloaded sname field\n"));        options = (u8_t *)&dhcp->msg_in->sname;        field_len = DHCP_SNAME_LEN;      /* TODO: check if else if () is necessary */      } else {        LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("overloaded sname and file field\n"));        options = (u8_t *)&dhcp->msg_in->sname;        field_len = DHCP_FILE_LEN + DHCP_SNAME_LEN;      }      offset = 0;      /* at least 1 byte to read and no end marker */      while ((offset < field_len) && (options[offset] != DHCP_OPTION_END)) {        if (options[offset] == option_type) {           LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("option found at offset=%u\n", offset));          return &options[offset];        /* skip option */        } else {          LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("skipping option %u\n", options[offset]));          /* skip option type */          offset++;          offset += 1 + options[offset];        }      }    }  }  return 0;}/** * Return the byte of DHCP option data. * * @param client DHCP client. * @param ptr pointer obtained by dhcp_get_option_ptr(). * * @return byte value at the given address. */static u8_t dhcp_get_option_byte(u8_t *ptr){  LWIP_DEBUGF(DHCP_DEBUG, ("option byte value=%u\n", *ptr));  return *ptr;}/** * Return the 16-bit value of DHCP option data. * * @param client DHCP client. * @param ptr pointer obtained by dhcp_get_option_ptr(). * * @return byte value at the given address. */static u16_t dhcp_get_option_short(u8_t *ptr){  u16_t value;  value = *ptr++ << 8;  value |= *ptr;  LWIP_DEBUGF(DHCP_DEBUG, ("option short value=%u\n", value));  return value;}/** * Return the 32-bit value of DHCP option data. * * @param client DHCP client. * @param ptr pointer obtained by dhcp_get_option_ptr(). * * @return byte value at the given address. */static u32_t dhcp_get_option_long(u8_t *ptr){  u32_t value;  value = (u32_t)(*ptr++) << 24;  value |= (u32_t)(*ptr++) << 16;  value |= (u32_t)(*ptr++) << 8;  value |= (u32_t)(*ptr++);  LWIP_DEBUGF(DHCP_DEBUG, ("option long value=%lu\n", value));  return value;}#endif /* LWIP_DHCP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级理论性理论a| 欧美sm美女调教| 国产传媒一区在线| 免费观看一级欧美片| 亚洲午夜羞羞片| 中文字幕一区二区日韩精品绯色| 精品国产91乱码一区二区三区| 欧美日韩高清影院| 欧美在线高清视频| 91麻豆国产福利精品| 懂色av一区二区夜夜嗨| 国产麻豆精品久久一二三| 九九视频精品免费| 老司机免费视频一区二区| 免费高清成人在线| 日本系列欧美系列| 国产制服丝袜一区| 国产传媒日韩欧美成人| 国产不卡高清在线观看视频| 国产91精品一区二区| 成+人+亚洲+综合天堂| 成人avav在线| 91国模大尺度私拍在线视频| 欧美色图激情小说| 日韩欧美一卡二卡| 精品国产91亚洲一区二区三区婷婷| 精品少妇一区二区三区日产乱码| 久久亚洲春色中文字幕久久久| 国产婷婷一区二区| 一区二区三区精品| 麻豆久久一区二区| 99这里都是精品| 欧美高清dvd| 2017欧美狠狠色| 17c精品麻豆一区二区免费| 日韩**一区毛片| 国产凹凸在线观看一区二区| 91福利资源站| 国产婷婷色一区二区三区在线| 夜夜嗨av一区二区三区中文字幕| 另类综合日韩欧美亚洲| 99精品桃花视频在线观看| 欧美一区二区成人| 一区二区三区在线视频观看| 国产成人免费高清| 精品国产91久久久久久久妲己 | 五月综合激情婷婷六月色窝| 成人久久视频在线观看| 欧美精品日韩一区| 亚洲图片激情小说| 国产a久久麻豆| 欧美mv日韩mv| 男人的j进女人的j一区| 欧美日韩国产美女| 亚洲精品免费播放| 波多野结衣亚洲| 中文字幕成人网| 成人av综合一区| 国产欧美精品一区| 东方aⅴ免费观看久久av| 337p粉嫩大胆噜噜噜噜噜91av| 日韩成人精品视频| 日韩欧美国产一区二区三区 | 91精品国产高清一区二区三区蜜臀| 最新中文字幕一区二区三区| 成人国产精品免费网站| 久久婷婷国产综合精品青草| 国产精品一区二区你懂的| 久久美女艺术照精彩视频福利播放| 国产一区二区三区在线观看精品| 精品国产一区二区三区不卡| 蜜桃视频在线观看一区| 久久久久国产精品厨房| 丁香六月综合激情| 国产精品素人视频| 99re热这里只有精品免费视频| 国产精品国产精品国产专区不蜜| 色一情一乱一乱一91av| 亚洲一卡二卡三卡四卡| 欧美一卡二卡三卡四卡| 国产一区二区三区| 亚洲人成网站在线| 欧美一区三区四区| 成人妖精视频yjsp地址| 亚洲国产视频一区二区| 精品久久久久久综合日本欧美| 99久久综合精品| 五月婷婷欧美视频| 国产香蕉久久精品综合网| 91福利视频网站| 国内精品国产成人国产三级粉色| 国产精品美女一区二区三区 | 亚洲欧美电影院| 日韩精品资源二区在线| 色婷婷亚洲一区二区三区| 紧缚奴在线一区二区三区| 亚洲免费观看在线视频| 精品久久久影院| 欧美精品久久99久久在免费线 | 色综合一个色综合亚洲| www.日韩精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品久久久久aaaa| 欧美高清在线精品一区| 久久99久国产精品黄毛片色诱| 欧美人与性动xxxx| 91极品美女在线| 欧美绝品在线观看成人午夜影视| 欧美日韩亚洲高清一区二区| thepron国产精品| 国产成人在线电影| 精品一区二区三区久久久| 亚洲成av人影院| 亚洲一区二区三区视频在线| 国产丝袜美腿一区二区三区| 91精品国产综合久久国产大片 | 亚洲色图欧美偷拍| 国产日韩欧美精品电影三级在线| 亚洲色图欧洲色图| 综合久久给合久久狠狠狠97色| 国产精品卡一卡二| 亚洲成人黄色影院| 久久99精品久久久久久国产越南| 精品中文字幕一区二区小辣椒| 美女诱惑一区二区| 东方aⅴ免费观看久久av| 不卡影院免费观看| 欧美伊人久久久久久午夜久久久久| 91老师片黄在线观看| 欧美性猛交xxxx黑人交| 欧美一区二区免费视频| 欧美大度的电影原声| 久久久久久亚洲综合| 亚洲精品国产精品乱码不99| 免费观看成人av| 91小宝寻花一区二区三区| 欧美乱熟臀69xxxxxx| 欧美色区777第一页| 97se亚洲国产综合在线| 精品日韩在线观看| 日av在线不卡| 日韩你懂的在线观看| 日韩成人精品在线观看| 成人激情免费视频| 欧美tickle裸体挠脚心vk| 亚洲777理论| 在线观看亚洲一区| 亚洲日穴在线视频| 国产资源精品在线观看| 欧美一级一级性生活免费录像| 欧美激情中文字幕| 国产一二精品视频| 91精品欧美综合在线观看最新| 日韩理论在线观看| 国产麻豆欧美日韩一区| 欧美一区二区视频免费观看| 亚洲国产wwwccc36天堂| 91美女在线观看| 一区二区在线观看免费| 99久久精品国产网站| 久久综合狠狠综合久久激情| 九九久久精品视频| 久久精品视频在线看| 成人精品视频.| 亚洲日本va午夜在线影院| 成人国产亚洲欧美成人综合网| 欧美精品一区二区三区四区 | 色婷婷亚洲婷婷| 亚洲欧洲日产国码二区| 成人午夜视频福利| 日本一区二区三区国色天香| 国产精品1024| 中文字幕一区二区三| 91麻豆swag| 日韩精品成人一区二区三区| 精品免费99久久| av中文字幕不卡| 午夜精品久久久久久久久久| 国产亚洲一区二区三区在线观看| 成人激情开心网| 免费的成人av| 亚洲一区在线观看免费观看电影高清 | 国产sm精品调教视频网站| 久久久久久久综合| 成人免费毛片a| 亚洲一区二区三区视频在线 | 国产女同互慰高潮91漫画| 不卡欧美aaaaa| 五月婷婷久久综合| 久久先锋影音av鲁色资源网| 播五月开心婷婷综合| 天天色综合成人网| 久久午夜老司机| 欧美日韩精品一区二区三区| 国内精品第一页| 亚洲午夜av在线| 国产婷婷精品av在线| 91精品国产乱码久久蜜臀| www.久久久久久久久| 国产精品亚洲一区二区三区在线|