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

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

?? bgp_output.c

?? 同時支持IPv4和IPv6的BGP協議實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Copyright (C) 1998 WIDE Project. * All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND 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 PROJECT OR 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. */#include "include.h"#include "bgp.h"#include "router.h"#include "task.h"#include "rt_table.h"#include "aspath.h"#include "bgp_var.h"#include "in6.h"#include "ripng.h"#define BGP_LOG_SEND(type, len) IFLOG(LOG_BGPOUTPUT) \          do { syslog(LOG_DEBUG,\		   "BGP+ SEND %s+%d -> %s+%d",\		   ip6str2(&bnp->rp_myaddr),\		   ntohs(bnp->rp_myaddr.sin6_port),\		   bgp_peerstr(bnp),\		   ntohs(bnp->rp_addr.sin6_port));\	      syslog(LOG_DEBUG,\		     "BGP+ SEND message type %d (%s) length %d",\		     (type), bgp_msgstr[(type)], (len));\	  } while (0)/* *   bgp_send_open() */intbgp_send_open(struct rpcb *bnp){  int i;  u_int16_t      netasnum, nethldtim;  struct bgphdr *bh;  task          *tsk;  extern byte       outpkt[];  extern char      *bgp_msgstr[];  extern u_int16_t  my_as_number, bgpHoldtime;  extern u_int32_t  bgpIdentifier;  extern fd_set     fdmask;  extern task      *taskhead;  memset(outpkt, 0, BGPMAXPACKETSIZE);  bh = (struct bgphdr *)outpkt;  /** fixed-size header **/  /* Marker (16-octet to be all 1) */  memset(bh->bh_marker, 0xff, BGP_HEADER_MARKER_LEN);  /* Type   (1-octet) */  bh->bh_type = BGP_OPEN;  i = BGP_HEADER_LEN;  /***  Open Message Format  ***/  /* Version (1-octet)    */  outpkt[i++] = BGP_VERSION_4;  /* My Autonomous System (2-octet) */  netasnum = htons(my_as_number);  memcpy(&outpkt[i], &netasnum, 2);  i += 2;  /* Hold Time            (2-octet) */  nethldtim = htons(bgpHoldtime);  memcpy(&outpkt[i], &nethldtim, 2);  i += 2;  /* BGP Identifier       (4-octet) */  memcpy(&outpkt[i], &bgpIdentifier, 4);  /* net-order (jinmei) */  i += 4;  /* Optional Parameters  (length is specified by "Opt Parm Len") */  /* Opt Parm Len         (1-octet) */  i++;  /* NO authentification is supported. */  /* again, total msg Length (2-octet) field in the header */  bh->bh_length = htons(i);  /****  send OPEN message  ****/  if ((write(bnp->rp_socket, outpkt, i)) != i) {    syslog(LOG_ERR, "<bgp_send_open>: write failed");    bgp_cease(bnp);    return NULL;  }  bgp_update_stat(bnp, BGPS_OPENSENT);  BGP_LOG_SEND(BGP_OPEN, i);  /***   OpenSent   ***/  bnp->rp_state = BGPSTATE_OPENSENT;  IFLOG(LOG_BGPSTATE)    syslog(LOG_DEBUG, "<%s>: BGP state shift[%s] peer: %s", __FUNCTION__,	   bgp_statestr[bnp->rp_state], bgp_peerstr(bnp));  FD_SET(bnp->rp_socket, &fdmask);  /* open-sent Socket (to the global) */  MALLOC(tsk, task);  if (taskhead) {    insque(tsk, taskhead);  /* will be sorted later by task_timer_update() */  } else {    tsk->tsk_next = tsk;    tsk->tsk_prev = tsk;    taskhead      = tsk;  }  tsk->tsk_bgp         = bnp;  tsk->tsk_timename    = BGP_HOLD_TIMER;  bnp->rp_hold_timer = tsk; /* was originally set to a large value */  tsk->tsk_timefull.tv_sec  = bgpHoldtime;  tsk->tsk_timefull.tv_usec = 0;  /*  Hold timer ON. */   task_timer_update(tsk);  return NULL;}/* *   bgp_send_notification() */intbgp_send_notification(bnp, errcode, subcode, len, data)     struct rpcb *bnp;     byte errcode;     byte subcode;     int len;     byte *data;{  int            i;     /* bytes to send */  int            wlen;  struct bgphdr *bh;  extern byte      outpkt[];  extern char *bgp_errstr[];  extern char *bgp_hdrerrstr[];  extern char *bgp_opnerrstr[];  extern char *bgp_upderrstr[];  extern char *bgp_msgstr[];  memset(outpkt, 0, BGPMAXPACKETSIZE);  bh = (struct bgphdr *)outpkt;  /** fixed-size header **/  /* Marker (16-octet to be all 1) */  memset(bh->bh_marker, 0xff, BGP_HEADER_MARKER_LEN);  /* Type   (1-octet) */  bh->bh_type = BGP_NOTIFY;  i = BGP_HEADER_LEN;  /***  NOTIFICATION Message Format ***/  /*   Error Code, Sub Code  */  outpkt[i++] = errcode;  outpkt[i++] = subcode;  memcpy(&outpkt[i], data, len);  i += len;  /* again, total msg Length (2-octet) field in the header */  bh->bh_length = htons(i);  /****   send  NOTIFICATION  message   ****/   if ((wlen = write(bnp->rp_socket, outpkt, i)) != i)    syslog(LOG_ERR, "%s: write to %s (%s AS %d) failed: %s", __FUNCTION__,	   bgp_peerstr(bnp),	   ((bnp->rp_mode & BGPO_IGP) ? "Internal" : "External"),	   (int)bnp->rp_as, strerror(errno));  else    syslog(LOG_NOTICE,	   "NOTIFICATION sent to %s (%s AS %d): code %d (%s) data %s",	   bgp_peerstr(bnp),	   ((bnp->rp_mode & BGPO_IGP) ? "Internal" : "External"),	   (int)bnp->rp_as,	   errcode,	   bgp_errstr[errcode],	   bgp_errdatastr(data, len));  switch (errcode) { /* code */  case BGP_ERR_HEADER:    if (subcode <= BGP_ERRHDR_TYPE)      syslog(LOG_NOTICE, "\t subcode (%d) %s",	     subcode, bgp_hdrerrstr[subcode]);    break;  case BGP_ERR_OPEN:    if (subcode <= BGP_ERROPN_BADHOLDTIME)      syslog(LOG_NOTICE, "\t subcode (%d) %s",	     subcode, bgp_opnerrstr[subcode]);    break;  case BGP_ERR_UPDATE:    if (subcode <= BGP_ERRUPD_ASPATH)      syslog(LOG_NOTICE, "\t subcode (%d) %s",	     subcode, bgp_upderrstr[subcode]);    break;  default:    break;  }  bgp_update_stat(bnp, BGPS_NOTIFYSENT);  BGP_LOG_SEND(BGP_NOTIFY, i);  bnp->rp_state = BGPSTATE_IDLE;  IFLOG(LOG_BGPSTATE)    syslog(LOG_NOTICE, "<%s>: BGP state shift[%s] peer: %s", __FUNCTION__,	   bgp_statestr[bnp->rp_state], bgp_peerstr(bnp));  return NULL;    /* End of bgp_send_notification() */}/* *   bgp_send_keepalive() */intbgp_send_keepalive(struct rpcb *bnp){  struct bgphdr *bh;  extern byte       outpkt[];  extern char      *bgp_msgstr[];  memset(outpkt,   0, BGPMAXPACKETSIZE);  bh = (struct bgphdr *)outpkt;    /** fixed-size header **/  /* Marker (16-octet to be all 1) */  memset(bh->bh_marker, 0xff, BGP_HEADER_MARKER_LEN);  /* Type   (1-octet) */  bh->bh_type = BGP_KEEPALIVE;  /* again, total msg Length (2-octet) field in the header */  bh->bh_length = htons(BGP_HEADER_LEN);#if 0  /*   * XXX: we have to introduce a jitter here, but usleep   * is not appropriate...   */  usleep(BGP_ADV_DELAY);   /* <---- important !! */#endif   /****  send KEEPALIVE message  ****/  if ((write(bnp->rp_socket, outpkt, BGP_HEADER_LEN)) != BGP_HEADER_LEN) {    dperror("<bgp_send_keepalive>: write failed");    syslog(LOG_ERR, "<bgp_send_keepalive>: write failed");    bgp_cease(bnp);    return NULL;  }  bgp_update_stat(bnp, BGPS_KEEPALIVESENT);  BGP_LOG_SEND(BGP_KEEPALIVE, BGP_HEADER_LEN);  /*  KeepAlive Timer ON. */  task_timer_update(bnp->rp_keepalive_timer);  return NULL;}#define BGP_LOG_ATTR  IFLOG(LOG_BGPOUTPUT) { syslog(LOG_DEBUG,\			 "BGP+ SEND flags 0x%x code %s(%d):\\",\			 outpkt[i-2],\			 pa_typestr[outpkt[i-1]],\			 outpkt[i-1]); }/* * *   bgp_send_update() *       RETURN VALUES: last rte */struct rt_entry *bgp_send_update(bnp, rte, headrte)     struct rpcb     *bnp;     struct rt_entry *rte, *headrte;    /* is ring, and, have the same aspath. */{  struct bgphdr   *bh;  int              i, topa_p, mp_p, lennh_p, nlri_p;       /* cursor */  u_int8_t         origin;  int              aspathlen;  struct aspath   *asp;  u_int16_t        netafi;  u_int16_t        netmpnlrilen, nettpalen, netaspathlen;  u_int32_t        netorigid = 0;  u_int16_t        netnlrilen;  struct rtproto  *rtp;    /* origin protocol of rte                 */  struct rtproto   artp;  struct rt_entry *rt;     /* return value. the last RTE which advd. */  struct rt_entry *agg;    /* (1998/06/12) */  struct optatr *optatr;  extern byte       outpkt[];  extern u_int16_t  my_as_number;  extern byte       IamRR;  extern u_int32_t  bgpIdentifier;  extern char      *bgp_msgstr[], *bgp_statestr[];  extern char      *pa_typestr[], *origin_str[];  IFLOG(LOG_BGPOUTPUT)    syslog(LOG_DEBUG,	   "<%s>: invoked. AS=%u, ID=%s, state=%s",  /* iw97  */	   __FUNCTION__,	   bnp->rp_as, inet_ntoa(*(struct in_addr *)&bnp->rp_id),	   bgp_statestr[bnp->rp_state]);  if (bnp->rp_state != BGPSTATE_ESTABLISHED)    fatalx("<bgp_send_update>: internal error: invalid state");  if (rte == NULL) {                /* argument */    IFLOG(LOG_BGPOUTPUT)      syslog(LOG_DEBUG, "<%s>: Nothing to be sent.", __FUNCTION__);    return NULL;  }  memset(&artp, 0, sizeof(artp));  artp.rtp_type = RTPROTO_BGP;  artp.rtp_bgp   = bnp;  memset(outpkt, 0, BGPMAXPACKETSIZE);  rt = NULL;  bh = (struct bgphdr *)outpkt;    /*** fixed-size header ***/  /* Marker (16 octets to be all 1) */  memset(bh->bh_marker, 0xff, BGP_HEADER_MARKER_LEN);  /* Type   (1 octet) */  bh->bh_type = BGP_UPDATE;  i = BGP_HEADER_LEN;  /***  Update Message Format  ***/  /* Unfeasible Routes Length (2 octets)  */   i += 2;  /* IPv6 (BGP4+) doesn't send this.      */  /*   Total Path Attribute Length (2 octets) (0...65535)    */  i += 2;  topa_p = i;  rtp = &rte->rt_proto;              /* identical to each RTE */  /*   *   Path Attributes   */  /**  ORIGIN (Type Code 1)  **/  outpkt[i++] |= PA_FLAG_TRANS;      /* well-known mandatory */  outpkt[i++] =  PA4_TYPE_ORIGIN;    /* T */  BGP_LOG_ATTR;  outpkt[i++] =  PA4_LEN_ORIGIN;     /* L */  /* data len */                                     /* V */  switch (rtp->rtp_type) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品三级日韩久久| 4438x亚洲最大成人网| 在线视频你懂得一区二区三区| 欧美怡红院视频| 国产精品人成在线观看免费| 午夜欧美电影在线观看| 国产成人av网站| 日韩欧美一区二区三区在线| 亚洲卡通欧美制服中文| 国产精品18久久久久久久久 | 久久免费精品国产久精品久久久久| 亚洲天天做日日做天天谢日日欢| 精品综合久久久久久8888| 国产成人精品综合在线观看| 8v天堂国产在线一区二区| 国产精品国产自产拍在线| 狠狠色综合播放一区二区| 欧美日韩精品一区二区三区蜜桃| 中文字幕欧美一| 福利一区二区在线观看| 欧美va亚洲va| 五月开心婷婷久久| 欧美探花视频资源| 亚洲色图欧洲色图| av中文一区二区三区| 国产日韩精品一区二区浪潮av| 国产欧美日韩亚州综合| 成人18视频日本| 日韩欧美中文字幕一区| 亚洲黄色av一区| 91香蕉视频mp4| ...av二区三区久久精品| 国产乱子伦视频一区二区三区 | 欧美一区二区国产| 日韩综合在线视频| 3751色影院一区二区三区| 亚洲大片精品永久免费| 欧美一个色资源| 日韩高清在线观看| 麻豆一区二区三| 538在线一区二区精品国产| 亚洲妇女屁股眼交7| 91福利视频在线| 亚洲午夜精品久久久久久久久| 成人av资源下载| 亚洲男人的天堂av| 在线精品视频免费观看| 亚洲一区免费视频| 欧美精品电影在线播放| 日本三级韩国三级欧美三级| 91麻豆精品国产91久久久使用方法 | av电影天堂一区二区在线| 亚洲欧洲精品一区二区精品久久久| 东方aⅴ免费观看久久av| 中文字幕五月欧美| 在线观看视频一区| 日韩激情一区二区| 欧美精品一区男女天堂| av在线综合网| 丝袜亚洲另类欧美综合| 亚洲精品一区二区三区四区高清| 国产精品99久久久久久有的能看| 亚洲视频中文字幕| 欧美色视频在线观看| 亚洲视频在线一区观看| 色素色在线综合| 日韩高清一区二区| 日韩一区二区三区电影在线观看| 另类小说综合欧美亚洲| 国产亚洲精品福利| 成人免费视频一区| 亚洲成a人片在线不卡一二三区| 欧美午夜一区二区三区 | 欧美韩日一区二区三区四区| 成人理论电影网| 一二三区精品福利视频| 欧美成人一区二区三区片免费 | 国产精品久久看| 欧美制服丝袜第一页| 免费看欧美美女黄的网站| 久久久不卡网国产精品二区| 国产成人免费av在线| 奇米精品一区二区三区四区| 精品国产三级a在线观看| a在线播放不卡| 亚洲v精品v日韩v欧美v专区 | 亚洲成在线观看| 精品国产自在久精品国产| 成人免费视频一区二区| 婷婷综合在线观看| 欧美激情一区二区三区不卡| 欧美性高清videossexo| 国产精品911| 日韩av一区二区三区四区| 国产精品入口麻豆原神| 欧美精品日日鲁夜夜添| 国产99久久久国产精品潘金 | 欧美久久婷婷综合色| 国产v日产∨综合v精品视频| 一区二区三区日韩欧美| 久久日韩精品一区二区五区| 成人午夜电影久久影院| 国产一区二区精品久久| 午夜免费久久看| 中文字幕一区二区在线播放| 日韩午夜三级在线| 色系网站成人免费| 国产精品911| 男男视频亚洲欧美| 午夜视频在线观看一区二区| 国产精品久久久久三级| 精品欧美一区二区三区精品久久| 一本久久精品一区二区| 风间由美一区二区三区在线观看| 五月天视频一区| 亚洲永久免费av| 国产精品黄色在线观看| 精品国产乱码久久久久久免费| av中文字幕不卡| 国产精品亚洲专一区二区三区| 亚洲电影视频在线| 亚洲欧美二区三区| 国产精品国产三级国产a| 久久久一区二区三区| 日韩精品中午字幕| 555www色欧美视频| 日韩精品专区在线影院重磅| 制服.丝袜.亚洲.中文.综合| 欧日韩精品视频| 日本韩国欧美一区| 日本精品一级二级| 欧洲国内综合视频| 在线视频中文字幕一区二区| 在线观看免费亚洲| 欧美体内she精视频| 欧美性生活久久| 欧美午夜影院一区| 欧美久久高跟鞋激| 欧美日韩国产一二三| 欧美日韩高清不卡| 欧美日韩久久一区二区| 这里只有精品99re| 日韩一区二区麻豆国产| 欧美一级日韩不卡播放免费| 91麻豆精品国产91久久久使用方法 | 欧美日韩精品一区二区天天拍小说| 91麻豆国产香蕉久久精品| 91免费视频观看| 欧美在线视频日韩| 欧美性生交片4| 555夜色666亚洲国产免| 精品久久久久久久久久久久久久久久久| 日韩一卡二卡三卡国产欧美| 日韩精品一区国产麻豆| 久久先锋影音av鲁色资源| 久久精品人人做| 最新欧美精品一区二区三区| 国产拍揄自揄精品视频麻豆 | 欧美一区二区三区视频在线| 日韩三级伦理片妻子的秘密按摩| 欧美精品一区二区三区蜜桃视频| 国产欧美中文在线| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧美一区二区三区极速播放| 亚洲国产一区二区视频| 久久99热国产| 色国产综合视频| 欧美成人一区二区三区| 国产精品久久久久久妇女6080 | 国产视频亚洲色图| 一区二区成人在线| 天天免费综合色| 日韩av一二三| 99精品黄色片免费大全| 69精品人人人人| 欧美国产丝袜视频| 日韩精品一二三四| 国产成人免费9x9x人网站视频| 欧美在线不卡视频| 国产三区在线成人av| 一区二区在线观看免费| 成人免费高清视频| 欧美美女一区二区| 亚洲欧洲日产国码二区| 免费在线欧美视频| 在线免费一区三区| 国产欧美日韩激情| 国产日韩欧美制服另类| 精品一区二区三区免费观看| 在线观看区一区二| 国产精品家庭影院| 国产一区二区精品久久99| 在线电影欧美成精品| 国产日韩精品视频一区| 国内精品不卡在线| 91精品国产福利| 亚洲曰韩产成在线| 99精品在线免费| 国产三级精品三级在线专区| 免费视频最近日韩|