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

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

?? mngr.c

?? rstp源碼
?? C
字號:
/************************************************************************  * RSTP library - Rapid Spanning Tree (802.1t, 802.1w)  * Copyright (C) 2001-2003 Optical Access  * Author: Alex Rozin  *  * This file is part of RSTP library.  *  * RSTP library is free software; you can redistribute it and/or modify it  * under the terms of the GNU Lesser General Public License as published by the  * Free Software Foundation; version 2.1  *  * RSTP library is distributed in the hope that it will be useful, but  * WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser  * General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public License  * along with RSTP library; see the file COPYING.  If not, write to the Free  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  * 02111-1307, USA.  **********************************************************************/#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#include <sys/wait.h>#include <sys/time.h>#include <sys/types.h>#include <signal.h>#include <unistd.h>#include <errno.h>#include <readline/readline.h>#include "cli.h"#include "bitmap.h"#include "uid.h"UID_SOCKET_T    main_sock;typedef struct port_s {  int port;  struct bridge_s *bridge_partner;  int             port_partner;} PORT_T;typedef struct bridge_s {  long      pid;  long      number_of_ports;  PORT_T*   ports;  UID_SOCKET_T  sock;  struct bridge_s* next;} BRIDGE_T;static BRIDGE_T* br_lst = 0;int disconnect_port (PORT_T* port, char reset_myself){  UID_MSG_T     msg;  if (! port->bridge_partner) {    printf ("can't disconnect from port p%02d: it has not a partner\n",            port->port_partner);    return -1;  }  printf ("disconnect from port p%02d for bridge B%ld\n",          port->port_partner, port->bridge_partner->pid);    msg.header.sender_pid = getpid ();  msg.header.cmd_type = UID_CNTRL;  msg.body.cntrl.cmd = UID_PORT_DISCONNECT;  msg.header.destination_port = port->port_partner;  UiD_SocketSendto (&port->bridge_partner->sock, &msg, sizeof (UID_MSG_T));  if (reset_myself)    port->bridge_partner = NULL;  else {    port = port->bridge_partner->ports + port->port_partner - 1;    port->bridge_partner = NULL;  }  return 0;}int register_bridge (UID_MSG_T* msg, UID_SOCKET_T* socket_4_reply){  register BRIDGE_T* newbr;  /* check if such bridge has just been registered */  for (newbr = br_lst; newbr; newbr = newbr->next)    if (newbr->pid == msg->header.sender_pid) {      printf ("Sorry, such bridge has just been registered\n");      /* TBT: may be send him SHUTDOWN ? */    }  newbr = (BRIDGE_T*) malloc (sizeof (BRIDGE_T));  if (! newbr) {    printf ("Sorry, there is no memory for it :(\n");    return 0;  }  newbr->pid = msg->header.sender_pid;  newbr->ports = (PORT_T*) calloc (msg->body.cntrl.param1, sizeof (PORT_T));  if (! newbr->ports) {    printf ("Sorry, there is no memory for its ports :(\n");    free (newbr);    return 0;  }  newbr->number_of_ports = msg->body.cntrl.param1;  memcpy (&newbr->sock, socket_4_reply, sizeof (UID_SOCKET_T));  /* bind it to the begin of list */  newbr->next = br_lst;  br_lst = newbr;  return 0;}int unregister_bridge (UID_MSG_T* msg){  register BRIDGE_T* oldbr;  register BRIDGE_T* prev = NULL;  register PORT_T*   port;  register int      indx;  /* check if such bridge has just been registered */  for (oldbr = br_lst; oldbr; oldbr = oldbr->next)    if (oldbr->pid == msg->header.sender_pid) {      break;    } else      prev = oldbr;  if (! oldbr) {    printf ("Sorry, this bridge has not yet been registered ? :(\n");    return 0;  }  /* disconnect all its connceted ports */  for (indx = 0; indx < oldbr->number_of_ports; indx++) {    port = oldbr->ports + indx;    if (port->bridge_partner) {      disconnect_port (port, 0);    }  }     /* delete from the list & free */  if (prev)    prev->next = oldbr->next;  else    br_lst = oldbr->next;      free (oldbr->ports);  free (oldbr);  return 0;}static long scan_br_name (char* param){  if ('B' == param[0])    return strtoul(param + 1, 0, 10);  else    return strtoul(param, 0, 10);}static int show_bridge (int argc, char** argv){  long           pid = 0;  register BRIDGE_T* br = NULL;  register PORT_T*   port;  register int       indx, cnt = 0;  if (argc > 1) {    pid = scan_br_name (argv[1]);    printf ("You wanted to see B%ld, didn't you ?\n", pid);  }  for (br = br_lst; br; br = br->next)     if (! pid || pid == br->pid) {      printf ("%2d. Bridge B%ld has %ld ports:\n",              ++cnt,              (long) br->pid, br->number_of_ports);      for (indx = 0; indx < br->number_of_ports; indx++) {        port = br->ports + indx;        if (port->bridge_partner) {          printf ("port p%02d ", (int) indx + 1);          printf ("connected to B%ld port p%02d\n",                  port->bridge_partner->pid,                  port->port_partner);        }      }    }    if (! cnt) {    printf ("There are no such bridges :(\n");  }  return 0;}static void _link_two_ports (BRIDGE_T* br1, PORT_T* port1,  int indx1,                             BRIDGE_T* br2, PORT_T* port2,  int indx2){  UID_MSG_T     msg;  port1->bridge_partner = br2;  port1->port_partner = indx2;  port2->bridge_partner = br1;  port2->port_partner = indx1;  msg.header.sender_pid = getpid ();  msg.header.cmd_type = UID_CNTRL;  msg.body.cntrl.cmd = UID_PORT_CONNECT;  msg.header.destination_port = indx1;  UiD_SocketSendto (&br1->sock, &msg, sizeof (UID_MSG_T));  msg.header.destination_port = indx2;  UiD_SocketSendto (&br2->sock, &msg, sizeof (UID_MSG_T));}static int link_bridges (int argc, char** argv){  long       pid1, pid2;  int        indx1, indx2;  BRIDGE_T*  br;  BRIDGE_T*  br1;  BRIDGE_T*  br2;  PORT_T*    port1;  PORT_T*    port2;  if (argc < 5) {    printf ("for this command must be 4 argumenta :(\n");    return 0;  }  pid1 = scan_br_name (argv[1]);  indx1 = strtoul(argv[2], 0, 10);  pid2 = scan_br_name (argv[3]);  indx2 = strtoul(argv[4], 0, 10);  printf ("connect B%ld port p%02d to B%ld port p%02d\n",          pid1, indx1, pid2, indx2);  for (br = br_lst; br; br = br->next) {     //printf ("check B%ld\n", br->pid);     if (br->pid == pid1) br1 = br;     if (br->pid == pid2) br2 = br;  }  if (! br1 || ! br2) {    printf ("Sorry, one of these bridges is absent :(\n");    return 0;  }  if (indx1 > br1->number_of_ports || indx1 < 0) {    printf ("Sorry, p%02d invalid\n", indx1);    return 0;  }  if (indx2 > br2->number_of_ports || indx2 < 0) {    printf ("Sorry, p%02d invalid\n", indx2);    return 0;  }    port1 = br1->ports + indx1 - 1;  port2 = br2->ports + indx2 - 1;  if (port1->bridge_partner)    printf ("port p%02d is connected\n", indx1);  if (port2->bridge_partner)    printf ("port p%02d is connected\n", indx2);  if (port1->bridge_partner || port2->bridge_partner)    return 0;  _link_two_ports (br1, port1, indx1,                   br2, port2, indx2);  return 0;}static int unlink_port (int argc, char** argv){  long pid1;  int indx1;  BRIDGE_T*     br;  BRIDGE_T*     br1;  BRIDGE_T*     br2;  PORT_T*       port1;  PORT_T*       port2;  if (argc < 3) {    printf ("for this command must be 2 argumenta :(\n");    return 0;  }  pid1 = scan_br_name (argv[1]);  indx1 = strtoul(argv[2], 0, 10);  for (br = br_lst; br; br = br->next) {     //printf ("check B%ld\n", br->pid);     if (br->pid == pid1) br1 = br;  }  if (! br1) {    printf ("Sorry, the bridge B%ldis absent :(\n", pid1);    return 0;  }  if (indx1 > br1->number_of_ports || indx1 < 0) {    printf ("Sorry, port p%02d invalid\n", indx1);    return 0;  }  port1 = br1->ports + indx1 - 1;  if (! port1->bridge_partner) {    printf ("port p%02d is disconnected\n", indx1);    return 0;  }  br2 = port1->bridge_partner;  port2 = br2->ports + port1->port_partner - 1;  disconnect_port (port1, 1);  disconnect_port (port2, 1);  return 0;}static int link_ring (int argc, char** argv){  BRIDGE_T*     br1;  BRIDGE_T*     br2;  PORT_T*       port1;  PORT_T*       port2;  register int indx;  /* unlink all */  for (br1 = br_lst; br1; br1 = br1->next) {    /* disconnect all its connceted ports */    for (indx = 0; indx < br1->number_of_ports; indx++) {      port1 = br1->ports + indx;      if (port1->bridge_partner) {        printf ("disconnect B%ld ", br1->pid);        printf ("port p%02d (with B%ld-p%02d)\n",                  indx + 1,                  port1->bridge_partner->pid,                  port1->port_partner);        br2 = port1->bridge_partner;        port2 = br2->ports + port1->port_partner - 1;        disconnect_port (port1, 1);        disconnect_port (port2, 1);      }    }   }  /* buid ring */  for (br1 = br_lst; br1; br1 = br1->next) {    br2 = br1->next;    if (! br2)  br2 = br_lst;    _link_two_ports (br1, br1->ports + 1, 2,                     br2, br2->ports + 0, 1);  }  return 0;}static CMD_DSCR_T lang[] = {  THE_COMMAND("show", "get bridge[s] connuctivity")  PARAM_STRING("bridge name", "all")  THE_FUNC(show_bridge)  THE_COMMAND("link", "link two bridges")  PARAM_STRING("first bridge name", NULL)  PARAM_NUMBER("port number on first bridge", 1, NUMBER_OF_PORTS, NULL)  PARAM_STRING("second bridge name", NULL)  PARAM_NUMBER("port number on second bridge", 1, NUMBER_OF_PORTS, NULL)  THE_FUNC(link_bridges)  THE_COMMAND("unlink", "unlink the port of the bridge")  PARAM_STRING("bridge name", NULL)  PARAM_NUMBER("port number on bridge", 1, NUMBER_OF_PORTS, NULL)  THE_FUNC(unlink_port)  THE_COMMAND("ring", "link all bridges into a ring")  THE_FUNC(link_ring)  END_OF_LANG};void mngr_start (void){  if (0 != UiD_SocketInit (&main_sock, UID_REPL_PATH, UID_BIND_AS_SERVER)) {    printf ("FATAL: can't init the connection\n");    exit (-3);  }  cli_register_language (lang);}void mngr_shutdown (void){  UID_MSG_T msg;  BRIDGE_T* br;  msg.header.sender_pid = getpid ();  msg.header.cmd_type = UID_CNTRL;  msg.body.cntrl.cmd = UID_BRIDGE_SHUTDOWN;  for (br = br_lst; br; br = br->next) {     UiD_SocketSendto (&br->sock, &msg, sizeof (UID_MSG_T));  }}char *get_prompt (void){  static char prompt[MAX_CLI_PROMT];  snprintf (prompt, MAX_CLI_PROMT - 1, "%s Mngr > ", UT_sprint_time_stamp());  return prompt;}int mngr_control (UID_MSG_T* msg, UID_SOCKET_T* sock_4_reply){  switch (msg->body.cntrl.cmd) {    default:    case UID_PORT_CONNECT:    case UID_PORT_DISCONNECT:      printf ("Unexpected contol message '%d'\n", (int) msg->body.cntrl.cmd);      break;    case UID_BRIDGE_SHUTDOWN:      printf ("Bridge B%ld shutdown :(\n", (long) msg->header.sender_pid);      unregister_bridge (msg);      break;    case UID_BRIDGE_HANDSHAKE:      printf ("Bridge B%ld hello :)\n", (long) msg->header.sender_pid);      register_bridge (msg, sock_4_reply);      break;  }  return 0;}int mngr_rx_bpdu (UID_MSG_T* msg, size_t msgsize){  BRIDGE_T*     br;  PORT_T*   port;    for (br = br_lst; br; br = br->next) {     if (br->pid == msg->header.sender_pid) {       break;     }  }  if (! br) {    printf ("RX BPDU from unknown B%ld\n", msg->header.sender_pid);    return 0;  }  port = br->ports + msg->header.source_port - 1;  if (! port->bridge_partner) {    printf ("RX BPDU from unlinked port p%02d of bridge B%ld ?\n",            (int) msg->header.source_port,            msg->header.sender_pid);    return 0;  }   br = port->bridge_partner;  msg->header.destination_port = port->port_partner;  UiD_SocketSendto (&br->sock, msg, sizeof (UID_MSG_T));    return 0;}char read_uid (void){  UID_SOCKET_T  sock_4_reply;  UID_MSG_T msg;  size_t    msgsize;  int       rc = 0;  msgsize = UiD_SocketRecvfrom (&main_sock, &msg, MAX_UID_MSG_SIZE, &sock_4_reply);  if (msgsize <= 0) {    printf ("Something wrong in UIF ?\n");    return 0;  }  switch (msg.header.cmd_type) {    case UID_CNTRL:      rc =  mngr_control (&msg, &sock_4_reply);      break;    case UID_BPDU:      rc =  mngr_rx_bpdu (&msg, msgsize);      break;    default:      printf ("Unknown message type %d\n", (int) msg.header.cmd_type);      rc = 0;  }  return rc;}char shutdown_flag = 0;int main_loop (void){  fd_set                readfds;  int                   rc, numfds, sock, kkk;  //rl_callback_handler_install (get_prompt (), rl_read_cli);  sock = GET_FILE_DESCRIPTOR(&main_sock);  do {    numfds = -1;    FD_ZERO(&readfds);    kkk = 0; /* stdin for commands */    FD_SET(kkk, &readfds);    if (kkk > numfds) numfds = kkk;    FD_SET(sock, &readfds);    if (sock > numfds) numfds = sock;    if (numfds < 0)      numfds = 0;    else      numfds++;    rc = select (numfds, &readfds, NULL, NULL, NULL);    if (rc < 0) {             // Error      if (EINTR == errno) continue; // don't break      printf ("FATAL_MODE:select failed: %s\n", strerror(errno));      return -2;    }    if (FD_ISSET(0, &readfds)) {      rl_callback_read_char ();    }    if (FD_ISSET(sock, &readfds)) {      shutdown_flag |= read_uid ();    }  } while(! shutdown_flag);  return 0;}int main (int argc, char** argv){  rl_init ();    mngr_start ();  main_loop ();  mngr_shutdown ();  rl_shutdown ();  return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱一区二区| 久久午夜电影网| 26uuu成人网一区二区三区| 国产精品久久久久久久岛一牛影视| 亚洲综合色婷婷| 粉嫩一区二区三区性色av| 欧美一区二区三区播放老司机| 国产精品久久久久久久久免费樱桃| 免费看欧美女人艹b| 91久久人澡人人添人人爽欧美| 久久久综合九色合综国产精品| 亚洲成在线观看| 91美女在线看| 国产日韩精品一区二区三区| 久久色在线观看| 亚洲女人的天堂| 国产精品99久久久久久似苏梦涵| 欧美精品免费视频| 夜夜亚洲天天久久| 色88888久久久久久影院野外| 国产丝袜美腿一区二区三区| 精品一区二区精品| 日韩亚洲欧美成人一区| 首页国产欧美久久| 欧美精品成人一区二区三区四区| 一区二区在线观看视频| 91免费国产在线观看| 亚洲欧洲日韩在线| 东方欧美亚洲色图在线| 亚洲国产高清在线| 国产精品99久久久久久宅男| 国产婷婷一区二区| 国产黄色精品视频| 国产精品九色蝌蚪自拍| 91小宝寻花一区二区三区| 亚洲视频小说图片| 欧美系列在线观看| 日韩国产欧美三级| 欧美高清视频在线高清观看mv色露露十八| 亚洲综合自拍偷拍| 日韩一区二区在线观看视频播放| 青青草原综合久久大伊人精品优势| 欧美一区二区成人| 久久精品国产网站| 国产欧美日韩视频一区二区| 成人亚洲一区二区一| 亚洲品质自拍视频网站| 欧美日韩高清一区二区三区| 日韩电影在线一区二区| 精品女同一区二区| 白白色 亚洲乱淫| 伊人婷婷欧美激情| 在线播放一区二区三区| 国产精品一区三区| 亚洲三级电影全部在线观看高清| 欧美性感一类影片在线播放| 理论电影国产精品| 国产精品夫妻自拍| 欧美午夜精品久久久久久超碰 | 国产女主播一区| 成人午夜在线免费| 亚洲曰韩产成在线| 欧美xxxxxxxxx| 99精品视频在线免费观看| 亚洲丰满少妇videoshd| 久久蜜桃av一区精品变态类天堂| 99久久国产综合精品麻豆| 午夜精品久久久久久久99水蜜桃 | 欧美三级中文字幕| 久久99国产精品免费网站| 久久久不卡网国产精品一区| 91香蕉国产在线观看软件| 天天色 色综合| 国产午夜精品理论片a级大结局| 91免费版在线看| 国产一区二区三区国产| 亚洲精品第1页| 国产亚洲成av人在线观看导航| 色妹子一区二区| 国产精品影视在线观看| 五月开心婷婷久久| 亚洲欧洲av在线| 久久影音资源网| 欧美三级日本三级少妇99| 粉嫩一区二区三区性色av| 日韩电影在线观看电影| 一片黄亚洲嫩模| 国产精品视频一二三区| 日韩精品一区二区三区在线播放| 色综合久久六月婷婷中文字幕| 久久精品国产精品亚洲红杏| 亚洲综合图片区| 中文字幕亚洲综合久久菠萝蜜| 日韩美女主播在线视频一区二区三区| 色视频欧美一区二区三区| 成人污视频在线观看| 精品一区二区三区在线播放| 亚洲一二三区在线观看| 亚洲欧美视频一区| 亚洲国产经典视频| 国产日产欧产精品推荐色| 欧美一二三区在线| 欧美精品丝袜中出| 欧美亚洲禁片免费| 欧美在线你懂的| 一本一道综合狠狠老| 91在线看国产| eeuss国产一区二区三区| 国产成人综合自拍| 国产不卡视频在线观看| 国产精品亚洲一区二区三区妖精 | 国产精品麻豆欧美日韩ww| 久久久久久久一区| 亚洲精品在线免费观看视频| 日韩欧美专区在线| 日韩欧美美女一区二区三区| 91精品国产丝袜白色高跟鞋| 欧美一区二区三区爱爱| 日韩欧美国产综合| 久久综合精品国产一区二区三区| 欧美本精品男人aⅴ天堂| 精品久久国产老人久久综合| 日韩美一区二区三区| 精品国产91乱码一区二区三区| 日韩精品一区二区三区老鸭窝| 2020国产精品| 国产欧美日韩在线| 亚洲女子a中天字幕| 亚洲一二三专区| 蜜桃视频一区二区三区在线观看| 国产伦精品一区二区三区免费| 国产99久久久国产精品潘金| av高清久久久| 7777精品伊人久久久大香线蕉经典版下载 | 精品午夜一区二区三区在线观看| 激情综合色综合久久综合| 韩国在线一区二区| 成人高清免费在线播放| 色综合激情久久| 欧美一级午夜免费电影| www成人在线观看| 亚洲欧洲www| 日韩中文字幕亚洲一区二区va在线| 美女视频黄 久久| 成人精品亚洲人成在线| 欧美专区日韩专区| 精品久久久久久久久久久久久久久久久 | 日韩电影一区二区三区四区| 国产精品一区二区在线观看不卡| 91视频免费看| 精品日韩99亚洲| 最新不卡av在线| 日本强好片久久久久久aaa| 国产一区二区精品在线观看| 91国产视频在线观看| 欧美成人一区二区三区片免费 | 精品欧美一区二区在线观看| 亚洲欧洲综合另类| 激情综合色丁香一区二区| 色综合久久六月婷婷中文字幕| 日韩免费一区二区| 一区二区三区四区蜜桃| 国产资源在线一区| 欧美三级电影网| 国产精品沙发午睡系列990531| 日韩激情视频在线观看| voyeur盗摄精品| 精品久久国产字幕高潮| 亚洲成av人片一区二区梦乃| 成人国产亚洲欧美成人综合网| 日韩免费视频一区二区| 亚洲最新在线观看| 成人aa视频在线观看| 欧美电影免费观看高清完整版在线观看| 亚洲日本乱码在线观看| 成人综合在线视频| 精品国产露脸精彩对白| 日日骚欧美日韩| 欧美性受xxxx| 亚洲欧美日韩国产综合| 国产成人高清在线| 精品日本一线二线三线不卡| 日本系列欧美系列| 精品婷婷伊人一区三区三| 中文字幕一区二区在线观看| 国产毛片精品国产一区二区三区| 日韩一区二区三区av| 五月开心婷婷久久| 欧美日韩另类一区| 一区二区三区精密机械公司| 91免费精品国自产拍在线不卡| 欧美高清在线精品一区| 国产精品一区三区| 国产欧美一区二区三区沐欲| 国产米奇在线777精品观看| 精品少妇一区二区三区免费观看| 麻豆成人91精品二区三区| 欧美一区二区视频观看视频| 日本亚洲视频在线| 日韩欧美国产三级|