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

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

?? ldp_hello.c

?? Linux平臺下
?? C
字號:
/* *  Copyright (C) James R. Leu 2000 *  jleu@mindspring.com * *  This software is covered under the LGPL, for more *  info check out http://www.gnu.org/copyleft/lgpl.html */#include <stdio.h>#include <sys/socket.h>#include "ldp_struct.h"#include "ldp_hello.h"#include "ldp_mesg.h"#include "ldp_buf.h"#include "ldp_adj.h"#include "ldp_hello.h"#include "ldp_entity.h"#include "ldp_session.h"#include "ldp_inet_addr.h"#include "ldp_pdu_setup.h"#include "mpls_assert.h"#include "mpls_socket_impl.h"#include "mpls_timer_impl.h"#include "mpls_lock_impl.h"#include "mpls_trace_impl.h"void ldp_hello_timeout_callback(mpls_timer_handle timer, void *extra,  mpls_cfg_handle handle){  ldp_adj *a = (ldp_adj *) extra;  ldp_global *g = (ldp_global*)handle;  LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_TIMER,    "Hello Timout fired: adj(%d)\n", a->index);  mpls_lock_get(g->global_lock);  if (a->session) {    a->session->shutdown_notif = LDP_NOTIF_HOLD_TIMER_EXPIRED;    a->session->shutdown_fatal = MPLS_BOOL_FALSE;  }  ldp_adj_shutdown(g, a);  /* timer is deleted inside of ldp_adj_shutdown */  /* the refcount release for the time is done in ldp_adj_shutdown as well */  mpls_lock_release(g->global_lock);}void ldp_hello_send_callback(mpls_timer_handle timer, void *extra,  mpls_cfg_handle handle){  ldp_entity *e = (ldp_entity*)extra;  ldp_global *g = (ldp_global*)handle;  LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_TIMER,    "Hello Send fired: entity(%d)\n", e->index);  mpls_lock_get(g->global_lock);  ldp_hello_send(g, e);  mpls_lock_release(g->global_lock);}mpls_return_enum ldp_hello_send(ldp_global * g, ldp_entity * e){  ldp_mesg **hello = NULL;  mpls_timer_handle *timer;  int *oper_duration = 0;  int targeted = 0;  int duration = 0;  int request = 0;  MPLS_ASSERT(g != NULL && e != NULL);  switch (e->entity_type) {    case LDP_DIRECT:      MPLS_ASSERT(e->p.iff != NULL);      hello = &e->p.iff->hello;      oper_duration = &e->p.iff->hellotime_send_timer_duration;      timer = &e->p.iff->hellotime_send_timer;      targeted = 0;      request = 0;      break;    case LDP_INDIRECT:      MPLS_ASSERT(e->p.peer != NULL);      hello = &e->p.peer->hello;      oper_duration = &e->p.peer->hellotime_send_timer_duration;      timer = &e->p.peer->hellotime_send_timer;      targeted = 1;      if (e->p.peer->target_role == LDP_ACTIVE) {        request = 1;      } else {        request = 0;      }      break;    default:      MPLS_ASSERT(0);  }  if (!*hello) {    *hello = ldp_hello_create(g->message_identifier++,      e->hellotime_timer, &e->transport_address,      g->configuration_sequence_number, targeted, request);  }  duration = e->hellotime_interval;  if (mpls_timer_handle_verify(g->timer_handle, *timer) == MPLS_BOOL_FALSE) {    MPLS_REFCNT_HOLD(e);    *timer = mpls_timer_create(g->timer_handle, MPLS_UNIT_SEC,      duration, (void *)e, g, ldp_hello_send_callback);    if (mpls_timer_handle_verify(g->timer_handle, *timer) == MPLS_BOOL_FALSE) {      *oper_duration = 0;      MPLS_REFCNT_RELEASE(e, ldp_entity_delete);      return MPLS_FAILURE;    }    *oper_duration = duration;    mpls_timer_start(g->timer_handle, *timer, MPLS_TIMER_REOCCURRING);  } else {    if ((*oper_duration) != duration) {      mpls_timer_stop(g->timer_handle, *timer);      *oper_duration = duration;      mpls_timer_modify(g->timer_handle, *timer, duration);      mpls_timer_start(g->timer_handle, *timer, MPLS_TIMER_REOCCURRING);    }  }  LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_SEND, LDP_TRACE_FLAG_PERIODIC,    "Hello Send: entity(%d)\n", e->index);  return ldp_mesg_send_udp(g, e, *hello);}ldp_mesg *ldp_hello_create(uint32_t msgid, int holdtime, mpls_inet_addr * traddr,  uint32_t confnum, int targeted, int request){  mplsLdpHelloMsg_t *hello = NULL;  ldp_mesg *msg = NULL;  msg = ldp_mesg_create();  ldp_mesg_prepare(msg, MPLS_HELLO_MSGTYPE, msgid);  if (msg != NULL) {    hello = &msg->u.hello;    hello->trAdrTlvExists = 0;    hello->csnTlvExists = 0;    hello->chpTlvExists = 1;    /* this assumes we always want to receive updates for targeted hellos */    hello->baseMsg.msgLength += setupChpTlv(&(hello->chp), targeted,      request, 0, holdtime);    if (traddr && traddr->type == MPLS_FAMILY_IPV4 && traddr->u.ipv4 > 0) {      hello->trAdrTlvExists = 1;      hello->baseMsg.msgLength +=        setupTrAddrTlv(&(hello->trAdr), traddr->u.ipv4);    }    if (confnum > 0) {      hello->csnTlvExists = 1;      hello->baseMsg.msgLength += setupCsnTlv(&(hello->csn), confnum);    }  }  return msg;}mpls_return_enum ldp_hello_process(ldp_global * g, ldp_adj * a, ldp_entity *e,  int hellotime, uint32_t csn, mpls_inet_addr * traddr, int targeted,  int request){  mpls_inet_addr *local = NULL, *remote = NULL;  MPLS_ASSERT(a && e);  LDP_ENTER(g->user_data, "ldp_hello_process: a = %p, e = %p", a, e);  LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_PERIODIC,    "Hello Recv: entity(%d)\n", e->index);  switch (e->entity_type) {    case LDP_DIRECT:      /* ldp-11 3.5.2. Hello Message */      if (hellotime == 0) {        hellotime = 15;      }      if (MPLS_LIST_HEAD(&e->p.iff->addr_root)) {	local = &(MPLS_LIST_HEAD(&e->p.iff->addr_root)->address);      } else {        local = &g->lsr_identifier;      }      break;    case LDP_INDIRECT:      /* ldp-11 3.5.2. Hello Message */      if (hellotime == 0) {        hellotime = 45;      }      local = &g->lsr_identifier;      break;    default:      MPLS_ASSERT(0);  }  if (hellotime < e->hellotime_timer) {    LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_NORMAL,      "ldp_hello_process: adjusting hellotime_timer to match adj\n");    e->hellotime_timer = hellotime;  }  if (traddr != NULL) {    memcpy(&a->remote_transport_address, traddr, sizeof(struct mpls_inet_addr));  }  if (csn != a->remote_csn) {    /* the remote csn changes all we can do is clear the backoff time */    /* this will only enable a lsr in the active role to try again */    a->remote_csn = csn;    if (a->session && mpls_timer_handle_verify(g->timer_handle,      a->session->backoff_timer) == MPLS_BOOL_TRUE) {      ldp_session_backoff_stop(g, a->session);    }  }  /* JLEU should verify that the hello hasn't changed */  if (a->session) {    /*  && a->session->state == LDP_STATE_OPERATIONAL) */    /* all that matters is that we have a session in progress */    /* we already have an established session */    LDP_EXIT(g->user_data, "ldp_hello_process");    return MPLS_SUCCESS;  }  if (e->transport_address.type != MPLS_FAMILY_NONE) {    local = &e->transport_address;  }  if (a->remote_transport_address.type != MPLS_FAMILY_NONE) {    remote = &a->remote_transport_address;  } else {    remote = &a->remote_source_address;  }  switch (mpls_inet_addr_compare(local, remote)) {    case 1:      /* if at one point we through WE were passive */      if (a->role == LDP_PASSIVE && a->session) {        ldp_session_shutdown(g, a->session, MPLS_BOOL_TRUE);      }      a->role = LDP_ACTIVE;      LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_STATE,        "ldp_hello_process: ACTIVE(%d)\n", a->index);      if (ldp_session_create_active(g, a) != MPLS_SUCCESS) {	LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_NORMAL,	  "ldp_hello_process: creating an active session failed(%d)\n",	  a->index);        /* return FAILURE so we don't try to continue with the new adj */	return MPLS_FAILURE;      }      break;    case -1:      /* if at one point we through WE were active */      if (a->role == LDP_ACTIVE && a->session) {	ldp_session_shutdown(g, a->session, MPLS_BOOL_TRUE);      }      a->role = LDP_PASSIVE;      LDP_TRACE_LOG(g->user_data, MPLS_TRACE_STATE_ALL, LDP_TRACE_FLAG_STATE,        "ldp_hello_process: PASSIVE(%d)\n", a->index);      break;    default:      LDP_PRINT(g->user_data,        "ldp_hello_process: exit(%d) configuration error\n", a->index);      if (a->session) {	ldp_session_shutdown(g, a->session, MPLS_BOOL_TRUE);      }      a->role = LDP_NONE;      MPLS_ASSERT(a->session == NULL);      /* return FAILURE so we don't try to continue with the new adj */      LDP_EXIT(g->user_data, "ldp_hello_process: FAILURE");      return MPLS_FAILURE;  }  LDP_EXIT(g->user_data, "ldp_hello_process");  return MPLS_SUCCESS;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频你懂得一区| 中文字幕av不卡| 国产欧美日韩久久| 亚洲资源在线观看| 成人免费毛片app| 久久综合狠狠综合| 天天免费综合色| 91福利小视频| 中文在线一区二区 | 亚洲中国最大av网站| 国产乱妇无码大片在线观看| 欧美日韩国产综合一区二区三区| 国产欧美日韩另类一区| 久久国内精品自在自线400部| 欧美午夜不卡视频| 亚洲九九爱视频| 99视频一区二区三区| 国产欧美精品一区二区色综合朱莉| 日本特黄久久久高潮| 精品视频在线看| 一区二区三区在线观看网站| 成人污视频在线观看| 久久综合久久综合久久综合| 免费高清在线一区| 555www色欧美视频| 亚洲va天堂va国产va久| 日本伦理一区二区| 亚洲人成小说网站色在线| 高潮精品一区videoshd| 欧美国产激情一区二区三区蜜月| 国产精品一区二区免费不卡 | 欧美性大战久久久久久久蜜臀 | 国产精品免费视频一区| 国产a视频精品免费观看| 欧美国产精品v| 91污片在线观看| 亚洲青青青在线视频| 972aa.com艺术欧美| 亚洲视频电影在线| 欧美在线小视频| 亚洲成人激情社区| 欧美区视频在线观看| 天堂成人国产精品一区| 精品日韩欧美在线| 国产在线播精品第三| 国产午夜精品一区二区三区嫩草| 懂色av一区二区夜夜嗨| 亚洲三级在线观看| 欧美日韩第一区日日骚| 蜜桃视频免费观看一区| 久久久久久久久岛国免费| 92精品国产成人观看免费| 一区二区三区日韩在线观看| 91精品婷婷国产综合久久竹菊| 毛片av一区二区| 国产精品成人免费在线| 欧洲一区二区av| 久久国产精品99久久久久久老狼 | 国产精品亚洲а∨天堂免在线| 国产欧美精品日韩区二区麻豆天美| 97久久超碰精品国产| 亚洲成人高清在线| 久久久久久久久久久黄色| 一本一道综合狠狠老| 午夜久久福利影院| 亚洲国产精品t66y| 欧美日韩免费高清一区色橹橹| 精品亚洲国内自在自线福利| 国产精品欧美一级免费| 欧美久久一二区| 成人av免费网站| 日韩和欧美一区二区三区| 国产午夜精品久久| 欧美日韩高清一区二区| 高清成人在线观看| 免费在线一区观看| 亚洲欧美激情一区二区| 精品美女一区二区| 在线精品国精品国产尤物884a| 精品一区二区三区在线视频| 亚洲免费观看高清完整| 精品av综合导航| 欧美理论片在线| 色综合咪咪久久| 国产一区二区三区黄视频| 亚洲高清中文字幕| 国产精品久久久久桃色tv| 欧美哺乳videos| 欧美一区二区三区在线视频 | 欧美成人精品二区三区99精品| 91美女视频网站| 国产精品一级二级三级| 丝袜美腿亚洲色图| 亚洲视频一二三| 国产精品成人在线观看| 国产日韩欧美一区二区三区乱码| 日韩欧美成人激情| 欧美精选午夜久久久乱码6080| 99久免费精品视频在线观看 | 欧美日韩aaaaaa| 日本久久一区二区| 91啦中文在线观看| 99免费精品在线| 99在线精品免费| 成人丝袜18视频在线观看| 韩国成人精品a∨在线观看| 日韩成人精品在线观看| 亚洲二区在线观看| 亚洲国产一区二区视频| 一区二区三区中文字幕精品精品 | 精品久久久久久久久久久久久久久久久| 91福利资源站| 欧美日韩精品二区第二页| 色婷婷久久久久swag精品| 成人av手机在线观看| 99久久精品情趣| av在线一区二区三区| 91在线国内视频| 色综合视频在线观看| 色婷婷久久综合| 欧美羞羞免费网站| 欧美日韩国产成人在线91| 欧美久久久久中文字幕| 欧美sm极限捆绑bd| 国产欧美精品一区aⅴ影院 | 免费观看30秒视频久久| 另类小说视频一区二区| 九九九精品视频| 国产成人av电影在线| 不卡av电影在线播放| 91丨porny丨国产| 欧美色老头old∨ideo| 欧美一激情一区二区三区| 欧美一区二区精品在线| 欧美精品一区二区三区视频| 国产日本欧洲亚洲| 亚洲人一二三区| 日韩福利视频网| 国产精品资源网| 色美美综合视频| 在线播放中文字幕一区| 亚洲精品在线三区| 亚洲视频 欧洲视频| 日韩高清不卡一区二区| 国产成人精品三级| 色先锋资源久久综合| 日韩亚洲欧美一区二区三区| 久久精品一区二区三区四区| 亚洲女爱视频在线| 精品中文字幕一区二区小辣椒| av一区二区不卡| 欧美电视剧免费观看| ...xxx性欧美| 激情五月播播久久久精品| 色8久久人人97超碰香蕉987| 欧美一区二区福利在线| 亚洲色图都市小说| 六月丁香婷婷久久| 欧美影院一区二区三区| 欧美激情在线一区二区| 日韩二区三区四区| 91丨九色porny丨蝌蚪| 欧美不卡一区二区三区| 亚洲午夜精品久久久久久久久| 国产不卡视频一区| 日韩午夜中文字幕| 一区二区理论电影在线观看| 国产乱码精品一区二区三区五月婷| 欧美三级一区二区| 中文字幕亚洲电影| 国产精品综合在线视频| 欧美一区二区三区在线视频| 一区二区视频在线看| 成人av片在线观看| 久久久久久久性| 精品在线一区二区| 欧美一区二区精美| 午夜精品一区二区三区电影天堂 | 一区二区视频在线| 不卡一区二区三区四区| 久久午夜电影网| 九色porny丨国产精品| 91精品国产aⅴ一区二区| 亚洲影院在线观看| 色综合天天综合狠狠| 国产精品网站导航| 国产成人在线免费观看| 久久欧美一区二区| 国产一区二区成人久久免费影院| 91精品国产综合久久婷婷香蕉| 亚洲影院在线观看| 欧洲色大大久久| 亚洲精品免费在线观看| 91在线视频播放地址| 中文字幕av一区二区三区高| 国产不卡视频在线观看| 中文字幕成人av| 99国产精品久久| 日韩毛片在线免费观看| 色综合一个色综合|