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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ipcp.c

?? NXPl788上lwip的無(wú)操作系統(tǒng)移植,基于Embest開(kāi)發(fā)板
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/** In contrast to pppd 2.3.1, DNS support has been added, proxy-ARP and
    dial-on-demand has been stripped. */
/*****************************************************************************
* ipcp.c - Network PPP IP Control Protocol program file.
*
* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc.
* portions Copyright (c) 1997 by Global Election Systems Inc.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice and the following disclaimer are included verbatim in any 
* distributions. No written agreement, license, or royalty fee is required
* for any of the authorized uses.
*
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
* REVISION HISTORY
*
* 03-01-01 Marc Boucher <marc@mbsi.ca>
*   Ported to lwIP.
* 97-12-08 Guy Lancaster <lancasterg@acm.org>, Global Election Systems Inc.
*   Original.
*****************************************************************************/
/*
 * ipcp.c - PPP IP Control Protocol.
 *
 * Copyright (c) 1989 Carnegie Mellon University.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this paragraph are
 * duplicated in all such forms and that any documentation,
 * advertising materials, and other materials related to such
 * distribution and use acknowledge that the software was developed
 * by Carnegie Mellon University.  The name of the
 * University may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#include "lwip/opt.h"

#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */

#include "ppp.h"
#include "pppdebug.h"

#include "auth.h"
#include "fsm.h"
#include "vj.h"
#include "ipcp.h"

#include "lwip/inet.h"

#include <string.h>

/* #define OLD_CI_ADDRS 1 */ /* Support deprecated address negotiation. */

/* global vars */
ipcp_options ipcp_wantoptions[NUM_PPP];  /* Options that we want to request */
ipcp_options ipcp_gotoptions[NUM_PPP];   /* Options that peer ack'd */
ipcp_options ipcp_allowoptions[NUM_PPP]; /* Options we allow peer to request */
ipcp_options ipcp_hisoptions[NUM_PPP];   /* Options that we ack'd */

/* local vars */
static int default_route_set[NUM_PPP]; /* Have set up a default route */
static int cis_received[NUM_PPP];      /* # Conf-Reqs received */


/*
 * Callbacks for fsm code.  (CI = Configuration Information)
 */
static void ipcp_resetci (fsm *);                     /* Reset our CI */
static int  ipcp_cilen (fsm *);                       /* Return length of our CI */
static void ipcp_addci (fsm *, u_char *, int *);      /* Add our CI */
static int  ipcp_ackci (fsm *, u_char *, int);        /* Peer ack'd our CI */
static int  ipcp_nakci (fsm *, u_char *, int);        /* Peer nak'd our CI */
static int  ipcp_rejci (fsm *, u_char *, int);        /* Peer rej'd our CI */
static int  ipcp_reqci (fsm *, u_char *, int *, int); /* Rcv CI */
static void ipcp_up (fsm *);                          /* We're UP */
static void ipcp_down (fsm *);                        /* We're DOWN */
#if PPP_ADDITIONAL_CALLBACKS
static void ipcp_script (fsm *, char *); /* Run an up/down script */
#endif
static void ipcp_finished (fsm *);                    /* Don't need lower layer */


fsm ipcp_fsm[NUM_PPP]; /* IPCP fsm structure */


static fsm_callbacks ipcp_callbacks = { /* IPCP callback routines */
  ipcp_resetci,  /* Reset our Configuration Information */
  ipcp_cilen,    /* Length of our Configuration Information */
  ipcp_addci,    /* Add our Configuration Information */
  ipcp_ackci,    /* ACK our Configuration Information */
  ipcp_nakci,    /* NAK our Configuration Information */
  ipcp_rejci,    /* Reject our Configuration Information */
  ipcp_reqci,    /* Request peer's Configuration Information */
  ipcp_up,       /* Called when fsm reaches LS_OPENED state */
  ipcp_down,     /* Called when fsm leaves LS_OPENED state */
  NULL,          /* Called when we want the lower layer up */
  ipcp_finished, /* Called when we want the lower layer down */
  NULL,          /* Called when Protocol-Reject received */
  NULL,          /* Retransmission is necessary */
  NULL,          /* Called to handle protocol-specific codes */
  "IPCP"         /* String name of protocol */
};

/*
 * Protocol entry points from main code.
 */
static void ipcp_init (int);
static void ipcp_open (int);
static void ipcp_close (int, char *);
static void ipcp_lowerup (int);
static void ipcp_lowerdown (int);
static void ipcp_input (int, u_char *, int);
static void ipcp_protrej (int);


struct protent ipcp_protent = {
  PPP_IPCP,
  ipcp_init,
  ipcp_input,
  ipcp_protrej,
  ipcp_lowerup,
  ipcp_lowerdown,
  ipcp_open,
  ipcp_close,
#if PPP_ADDITIONAL_CALLBACKS
  ipcp_printpkt,
  NULL,
#endif /* PPP_ADDITIONAL_CALLBACKS */
  1,
  "IPCP",
#if PPP_ADDITIONAL_CALLBACKS
  ip_check_options,
  NULL,
  ip_active_pkt
#endif /* PPP_ADDITIONAL_CALLBACKS */
};

static void ipcp_clear_addrs (int);

/*
 * Lengths of configuration options.
 */
#define CILEN_VOID     2
#define CILEN_COMPRESS 4  /* min length for compression protocol opt. */
#define CILEN_VJ       6  /* length for RFC1332 Van-Jacobson opt. */
#define CILEN_ADDR     6  /* new-style single address option */
#define CILEN_ADDRS    10 /* old-style dual address option */


#define CODENAME(x) ((x) == CONFACK ? "ACK" : \
                     (x) == CONFNAK ? "NAK" : "REJ")


/*
 * ipcp_init - Initialize IPCP.
 */
static void
ipcp_init(int unit)
{
  fsm           *f = &ipcp_fsm[unit];
  ipcp_options *wo = &ipcp_wantoptions[unit];
  ipcp_options *ao = &ipcp_allowoptions[unit];

  f->unit      = unit;
  f->protocol  = PPP_IPCP;
  f->callbacks = &ipcp_callbacks;
  fsm_init(&ipcp_fsm[unit]);

  memset(wo, 0, sizeof(*wo));
  memset(ao, 0, sizeof(*ao));

  wo->neg_addr      = 1;
  wo->ouraddr       = 0;
#if VJ_SUPPORT
  wo->neg_vj        = 1;
#else  /* VJ_SUPPORT */
  wo->neg_vj        = 0;
#endif /* VJ_SUPPORT */
  wo->vj_protocol   = IPCP_VJ_COMP;
  wo->maxslotindex  = MAX_SLOTS - 1;
  wo->cflag         = 0;
  wo->default_route = 1;

  ao->neg_addr      = 1;
#if VJ_SUPPORT
  ao->neg_vj        = 1;
#else  /* VJ_SUPPORT */
  ao->neg_vj        = 0;
#endif /* VJ_SUPPORT */
  ao->maxslotindex  = MAX_SLOTS - 1;
  ao->cflag         = 1;
  ao->default_route = 1;
}


/*
 * ipcp_open - IPCP is allowed to come up.
 */
static void
ipcp_open(int unit)
{
  fsm_open(&ipcp_fsm[unit]);
}


/*
 * ipcp_close - Take IPCP down.
 */
static void
ipcp_close(int unit, char *reason)
{
  fsm_close(&ipcp_fsm[unit], reason);
}


/*
 * ipcp_lowerup - The lower layer is up.
 */
static void
ipcp_lowerup(int unit)
{
  fsm_lowerup(&ipcp_fsm[unit]);
}


/*
 * ipcp_lowerdown - The lower layer is down.
 */
static void
ipcp_lowerdown(int unit)
{
  fsm_lowerdown(&ipcp_fsm[unit]);
}


/*
 * ipcp_input - Input IPCP packet.
 */
static void
ipcp_input(int unit, u_char *p, int len)
{
  fsm_input(&ipcp_fsm[unit], p, len);
}


/*
 * ipcp_protrej - A Protocol-Reject was received for IPCP.
 *
 * Pretend the lower layer went down, so we shut up.
 */
static void
ipcp_protrej(int unit)
{
  fsm_lowerdown(&ipcp_fsm[unit]);
}


/*
 * ipcp_resetci - Reset our CI.
 */
static void
ipcp_resetci(fsm *f)
{
  ipcp_options *wo = &ipcp_wantoptions[f->unit];
  
  wo->req_addr = wo->neg_addr && ipcp_allowoptions[f->unit].neg_addr;
  if (wo->ouraddr == 0) {
    wo->accept_local = 1;
  }
  if (wo->hisaddr == 0) {
    wo->accept_remote = 1;
  }
  /* Request DNS addresses from the peer */
  wo->req_dns1 = ppp_settings.usepeerdns;
  wo->req_dns2 = ppp_settings.usepeerdns;
  ipcp_gotoptions[f->unit] = *wo;
  cis_received[f->unit] = 0;
}


/*
 * ipcp_cilen - Return length of our CI.
 */
static int
ipcp_cilen(fsm *f)
{
  ipcp_options *go = &ipcp_gotoptions[f->unit];
  ipcp_options *wo = &ipcp_wantoptions[f->unit];
  ipcp_options *ho = &ipcp_hisoptions[f->unit];

#define LENCIVJ(neg, old)   (neg ? (old? CILEN_COMPRESS : CILEN_VJ) : 0)
#define LENCIADDR(neg, old) (neg ? (old? CILEN_ADDRS : CILEN_ADDR) : 0)
#define LENCIDNS(neg)       (neg ? (CILEN_ADDR) : 0)

  /*
   * First see if we want to change our options to the old
   * forms because we have received old forms from the peer.
   */
  if (wo->neg_addr && !go->neg_addr && !go->old_addrs) {
    /* use the old style of address negotiation */
    go->neg_addr = 1;
    go->old_addrs = 1;
  }
  if (wo->neg_vj && !go->neg_vj && !go->old_vj) {
    /* try an older style of VJ negotiation */
    if (cis_received[f->unit] == 0) {
      /* keep trying the new style until we see some CI from the peer */
      go->neg_vj = 1;
    } else {
      /* use the old style only if the peer did */
      if (ho->neg_vj && ho->old_vj) {
        go->neg_vj = 1;
        go->old_vj = 1;
        go->vj_protocol = ho->vj_protocol;
      }
    }
  }

  return (LENCIADDR(go->neg_addr, go->old_addrs) +
          LENCIVJ(go->neg_vj, go->old_vj) +
          LENCIDNS(go->req_dns1) +
          LENCIDNS(go->req_dns2));
}


/*
 * ipcp_addci - Add our desired CIs to a packet.
 */
static void
ipcp_addci(fsm *f, u_char *ucp, int *lenp)
{
  ipcp_options *go = &ipcp_gotoptions[f->unit];
  int len = *lenp;

#define ADDCIVJ(opt, neg, val, old, maxslotindex, cflag) \
  if (neg) { \
    int vjlen = old? CILEN_COMPRESS : CILEN_VJ; \
    if (len >= vjlen) { \
      PUTCHAR(opt, ucp); \
      PUTCHAR(vjlen, ucp); \
      PUTSHORT(val, ucp); \
      if (!old) { \
        PUTCHAR(maxslotindex, ucp); \
        PUTCHAR(cflag, ucp); \
      } \
      len -= vjlen; \
    } else { \
      neg = 0; \
    } \
  }

#define ADDCIADDR(opt, neg, old, val1, val2) \
  if (neg) { \
    int addrlen = (old? CILEN_ADDRS: CILEN_ADDR); \
    if (len >= addrlen) { \
      u32_t l; \
      PUTCHAR(opt, ucp); \
      PUTCHAR(addrlen, ucp); \
      l = ntohl(val1); \
      PUTLONG(l, ucp); \
      if (old) { \
        l = ntohl(val2); \
        PUTLONG(l, ucp); \
      } \
      len -= addrlen; \
    } else { \
      neg = 0; \
    } \
  }

#define ADDCIDNS(opt, neg, addr) \
  if (neg) { \
    if (len >= CILEN_ADDR) { \
      u32_t l; \
      PUTCHAR(opt, ucp); \
      PUTCHAR(CILEN_ADDR, ucp); \
      l = ntohl(addr); \
      PUTLONG(l, ucp); \
      len -= CILEN_ADDR; \
    } else { \
      neg = 0; \
    } \
  }

  ADDCIADDR((go->old_addrs? CI_ADDRS: CI_ADDR), go->neg_addr,
      go->old_addrs, go->ouraddr, go->hisaddr);

  ADDCIVJ(CI_COMPRESSTYPE, go->neg_vj, go->vj_protocol, go->old_vj,
      go->maxslotindex, go->cflag);

  ADDCIDNS(CI_MS_DNS1, go->req_dns1, go->dnsaddr[0]);

  ADDCIDNS(CI_MS_DNS2, go->req_dns2, go->dnsaddr[1]);

  *lenp -= len;
}


/*
 * ipcp_ackci - Ack our CIs.
 *
 * Returns:
 *  0 - Ack was bad.
 *  1 - Ack was good.
 */
static int
ipcp_ackci(fsm *f, u_char *p, int len)
{
  ipcp_options *go = &ipcp_gotoptions[f->unit];
  u_short cilen, citype, cishort;
  u32_t cilong;
  u_char cimaxslotindex, cicflag;

  /*
   * CIs must be in exactly the same order that we sent...
   * Check packet length and CI length at each step.
   * If we find any deviations, then this packet is bad.
   */

#define ACKCIVJ(opt, neg, val, old, maxslotindex, cflag) \
  if (neg) { \
    int vjlen = old? CILEN_COMPRESS : CILEN_VJ; \
    if ((len -= vjlen) < 0) { \
      goto bad; \
    } \
    GETCHAR(citype, p); \
    GETCHAR(cilen, p); \
    if (cilen != vjlen || \
        citype != opt) { \
      goto bad; \
    } \
    GETSHORT(cishort, p); \
    if (cishort != val) { \
      goto bad; \
    } \
    if (!old) { \
      GETCHAR(cimaxslotindex, p); \
      if (cimaxslotindex != maxslotindex) { \
        goto bad; \
      } \
      GETCHAR(cicflag, p); \
      if (cicflag != cflag) { \
        goto bad; \
      } \
    } \
  }
  
#define ACKCIADDR(opt, neg, old, val1, val2) \
  if (neg) { \
    int addrlen = (old? CILEN_ADDRS: CILEN_ADDR); \
    u32_t l; \
    if ((len -= addrlen) < 0) { \
      goto bad; \

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人精品福利| 大胆亚洲人体视频| 精品美女被调教视频大全网站| 色婷婷综合五月| 欧美视频日韩视频在线观看| 色成人在线视频| 国产精品嫩草影院com| 国产人成亚洲第一网站在线播放| 久久久精品综合| 亚洲丝袜自拍清纯另类| 五月天亚洲精品| 国产福利一区二区三区视频在线| 懂色av一区二区三区免费观看| 天堂久久久久va久久久久| 91精品国产麻豆国产自产在线| 色狠狠av一区二区三区| 欧美一区二区久久| 国产精品精品国产色婷婷| 日日摸夜夜添夜夜添精品视频| 国产精品一二二区| 欧美日韩一区三区| 国产精品久久久久久久久免费相片| 亚洲一区在线观看网站| 国产精品一区二区久久不卡| 欧美日韩一区二区欧美激情| 国产亚洲精品aa| 免费看欧美女人艹b| 色国产综合视频| 中文字幕一区二区不卡| 国产精品亚洲视频| 日韩女同互慰一区二区| 天堂av在线一区| 色哟哟日韩精品| 最新中文字幕一区二区三区| 国产91精品久久久久久久网曝门| 日韩精品中文字幕在线一区| 三级在线观看一区二区| 日韩精品一区二区三区中文不卡 | 欧美丰满高潮xxxx喷水动漫| 中文字幕一区日韩精品欧美| 国产一区二区美女| 国产亚洲一区二区三区四区 | 最新日韩av在线| 欧美亚日韩国产aⅴ精品中极品| 日韩精品免费专区| 6080yy午夜一二三区久久| 亚洲国产视频a| 欧美日韩视频第一区| 亚洲国产精品一区二区www在线| 欧美亚男人的天堂| 爽好久久久欧美精品| 欧美成人aa大片| 欧美吞精做爰啪啪高潮| 精品美女一区二区| 91亚洲精品乱码久久久久久蜜桃| 亚洲精品高清在线| 69p69国产精品| 国产清纯白嫩初高生在线观看91 | 丁香啪啪综合成人亚洲小说 | 国产成人99久久亚洲综合精品| 婷婷久久综合九色综合绿巨人 | 偷拍亚洲欧洲综合| 日韩一卡二卡三卡四卡| 高清av一区二区| 亚洲一区二区三区三| 欧美不卡一区二区三区| av不卡在线播放| 精品亚洲成a人在线观看| 日韩美女视频一区二区| 日韩欧美国产综合| 欧美无砖砖区免费| 99久久久精品| 国产一区二区视频在线播放| 天使萌一区二区三区免费观看| 中文字幕一区二区在线播放| 日韩美女在线视频| 日本精品免费观看高清观看| 成人一区二区三区| 国产在线视频精品一区| 日本一区中文字幕| 中文字幕不卡在线观看| 久久新电视剧免费观看| 欧美成人女星排名| 欧美一级免费大片| 日韩视频一区二区三区在线播放| 欧美放荡的少妇| 制服丝袜亚洲精品中文字幕| 欧美美女喷水视频| 欧美日本一区二区三区| 337p亚洲精品色噜噜| 欧美一区二区三区在线视频| 91精品国产黑色紧身裤美女| 成人免费av资源| 国产精品久久久久7777按摩| 国产亚洲综合色| 国产精品久久99| 日日夜夜免费精品| 国产一区二区美女| 99麻豆久久久国产精品免费 | 国产精品久久久久精k8| 粉嫩aⅴ一区二区三区四区五区| 三级不卡在线观看| 国产伦精品一区二区三区免费| 成人国产精品免费网站| 精品一区二区精品| 成人午夜av电影| 91精品国产一区二区三区蜜臀| 国产亚洲欧美色| 午夜精品国产更新| 成人av网站免费| 精品粉嫩aⅴ一区二区三区四区| 亚洲久草在线视频| 国产成人精品网址| 日韩欧美的一区二区| 亚洲成a人片在线不卡一二三区| 国产精品一区二区男女羞羞无遮挡 | 日日摸夜夜添夜夜添亚洲女人| 成人sese在线| 国产精品私房写真福利视频| 免费在线观看日韩欧美| 欧美在线视频你懂得| 综合婷婷亚洲小说| www.欧美日韩| 亚洲三级电影网站| 国产午夜精品美女毛片视频| 天堂va蜜桃一区二区三区| 91在线视频官网| 亚洲卡通动漫在线| 91小视频在线| 亚洲午夜电影在线观看| 色婷婷亚洲一区二区三区| 国产精品福利一区| 色域天天综合网| 婷婷夜色潮精品综合在线| 欧美一区二区三区免费视频| 久久国产剧场电影| 国产亚洲欧洲一区高清在线观看| 国产91丝袜在线播放九色| 亚洲国产成人自拍| 欧美亚洲国产一区二区三区| 五月天视频一区| 久久综合一区二区| 色综合色综合色综合| 亚洲大片精品永久免费| 久久中文娱乐网| av一区二区三区黑人| 日本欧美一区二区在线观看| 久久久五月婷婷| 欧美在线视频你懂得| 久久精品99国产国产精| 亚洲激情成人在线| 欧美tk—视频vk| 色老综合老女人久久久| 蜜桃精品在线观看| 一区二区三区欧美久久| 久久嫩草精品久久久精品| 色综合久久中文字幕| 国产成人免费在线观看不卡| 亚洲福中文字幕伊人影院| 欧美国产日本韩| 久久久久久久久久久久电影| 在线综合+亚洲+欧美中文字幕| 一二三四区精品视频| 制服丝袜亚洲播放| 欧美视频在线一区| 色综合久久88色综合天天免费| 国产高清精品久久久久| 久久国产综合精品| 日日夜夜精品视频免费| 午夜精品久久久久久久蜜桃app| 亚洲色图另类专区| 亚洲精品免费电影| 亚洲男帅同性gay1069| 久久99精品国产麻豆婷婷洗澡| 色悠悠久久综合| 99国产精品久久久久| 99国产欧美久久久精品| 色综合中文字幕| 91欧美激情一区二区三区成人| 99久久99久久精品免费观看| 成人午夜电影小说| 色婷婷av一区二区三区之一色屋| 91免费小视频| 欧美在线视频日韩| 日韩精品综合一本久道在线视频| 日韩视频免费观看高清完整版在线观看| 欧美日韩三级一区二区| 精品国产乱码久久久久久浪潮| 欧美韩国日本综合| 婷婷丁香久久五月婷婷| 狠狠色丁香婷婷综合久久片| 国产a久久麻豆| 337p日本欧洲亚洲大胆精品| 国产性做久久久久久| 自拍偷自拍亚洲精品播放| 日本不卡中文字幕| proumb性欧美在线观看| 欧美日本国产视频| 中文天堂在线一区| 免费成人小视频|