📄 rstp_cli.c
字号:
#ifdef _CTC_
install_element (CONFIG_STP_NODE, &RstpPortPriority_CMD);
install_element (CONFIG_STP_NODE, &RstpPortCost_CMD);
#endif
/*install_element (CONFIG_DEVICE_NODE, &ConfigRstpBridgeMaxAge_CMD);
install_element (CONFIG_DEVICE_NODE, &ConfigRstpBridgeForwarddelay_CMD);
install_element (CONFIG_DEVICE_NODE, &ConfigRstpBridgeHelloTime_CMD);
install_element (CONFIG_DEVICE_NODE, &ConfigRstp_ForceVersion_CMD);
*/
/*install_element (CONFIG_RSTP_NODE, &RstpOneSecond_CMD);*/
/*install_element (DEBUG_HIDDEN_NODE, &ConfigRstp_PortDetail_CMD);*/
}
void rstp_showrun (struct vty *vty)
{
struct net_bridge *br = br_get_byname ("default");
struct net_bridge_port *p;
UID_STP_CFG_T old;
unsigned short priority;
vty_out (vty,"!rapid spanning tree config -----------------------------------------\r\n");
if (!br)
{
return;
}
/* config stpd default [enable | disable] default is disabled */
if (br->admin_state!= STP_DISABLED)
{
vty_out (vty, "set rstp enable \r\n");
}
if (br->ForceVersion != 2)
{
vty_out(vty,"set rstp forceVersion slow \r\n");
}
if (br->BrId.prio != DEF_BR_PRIO)
{
priority = br->BrId.prio;
vty_out(vty,"set rstp priority %d\r\n",priority);
}
if (br->BrTimes.MaxAge != DEF_BR_MAXAGE)
{
vty_out(vty,"set rstp maxage %d\r\n",br->BrTimes.MaxAge);
}
if (br->BrTimes.HelloTime != DEF_BR_HELLOT)
{
vty_out(vty,"set rstp hellotime %d\r\n",br->BrTimes.HelloTime);
}
if (br->BrTimes.ForwardDelay != DEF_BR_FWDELAY)
{
vty_out(vty,"set rstp forwarddelay %d\r\n",br->BrTimes.ForwardDelay);
}
vty_out (vty, "!rapid spanning tree config\r\n");
}
struct cl_cmd_module rstp_cmd_module;
char rstp_cmd_module_name[] = "rstp";
int Rstp_Cli_Init ()
{
bzero ((char *) &rstp_cmd_module, sizeof (struct cl_cmd_module));
rstp_cmd_module.module_name = (char *) rstp_cmd_module_name;
rstp_cmd_module.init_func = rstp_cli_installment;
rstp_cmd_module.showrun_func = rstp_showrun;
rstp_cmd_module.next = NULL;
rstp_cmd_module.prev = NULL;
cl_install_module (&rstp_cmd_module);
/*rstp_init();*/
};
static void print_bridge_id (UID_BRIDGE_ID_T * bridge_id, unsigned char cr,struct vty *vty)
{
int priority = 0;
priority = bridge_id->prio;
vty_out (vty,"Priority : %d\r\n",priority);
vty_out (vty,"Mac address : %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\r\n",
bridge_id->addr[0], bridge_id->addr[1],bridge_id->addr[2],
bridge_id->addr[3], bridge_id->addr[4], bridge_id->addr[5]);
}
static char *stp_state2str (RSTP_PORT_STATE stp_port_state, int detail)
{
if (detail)
{
switch (stp_port_state)
{
case UID_PORT_DISABLED:
return "Disabled";
case UID_PORT_DISCARDING:
return "Discarding";
case UID_PORT_LEARNING:
return "Learning";
case UID_PORT_FORWARDING:
return "Forwarding";
case UID_PORT_NON_STP:
return "NoStp";
default:
return "Unknown";
}
}
switch (stp_port_state)
{
case UID_PORT_DISABLED:
return "Dis";
case UID_PORT_DISCARDING:
return "Blk";
case UID_PORT_LEARNING:
return "Lrn";
case UID_PORT_FORWARDING:
return "Fwd";
case UID_PORT_NON_STP:
return "Non";
default:
return "Unk";
}
}
int set_bridge_cfg_value (int long value, unsigned long val_mask,struct vty *vty)
{
UID_STP_CFG_T uid_cfg;
char *val_name;
int rc;
uid_cfg.field_mask = val_mask;
switch (val_mask)
{
case BR_CFG_STATE:
uid_cfg.stp_enabled = value;
val_name = "state";
break;
case BR_CFG_PRIO:
uid_cfg.bridge_priority = value;
val_name = "priority";
break;
case BR_CFG_AGE:
uid_cfg.max_age = value;
val_name = "max_age";
break;
case BR_CFG_HELLO:
uid_cfg.hello_time = value;
val_name = "hello_time";
break;
case BR_CFG_DELAY:
uid_cfg.forward_delay = value;
val_name = "forward_delay";
break;
case BR_CFG_FORCE_VER:
uid_cfg.force_version = value;
val_name = "force_version";
break;
case BR_CFG_AGE_MODE:
case BR_CFG_AGE_TIME:
default:
vty_out (vty,"Invalid value mask 0X%lx\n", val_mask);
return -1;
break;
}
rc = STP_IN_stpm_set_cfg (&uid_cfg,vty);
return 0;
}
#ifdef _CTC_
void
set_rstp_port_cfg_value (int port_index,
unsigned long value,
unsigned long val_mask)
{
UID_STP_PORT_CFG_T uid_cfg;
int rc, detail;
char *val_name;
/* if (port_index > 0)
{
BitmapClear(&uid_cfg.port_bmp);
BitmapSetBit(&uid_cfg.port_bmp, port_index - 1);
detail = 1;
}
else
{
BitmapSetAllBits(&uid_cfg.port_bmp);
detail = 0;
}*/
uid_cfg.field_mask = val_mask;
switch (val_mask)
{
case PT_CFG_MCHECK:
val_name = "mcheck";
break;
case PT_CFG_COST:
uid_cfg.admin_port_path_cost = value;
val_name = "path cost";
break;
case PT_CFG_PRIO:
uid_cfg.port_priority = value;
val_name = "priority";
break;
case PT_CFG_P2P:
uid_cfg.admin_point2point = (ADMIN_P2P_T) value;
val_name = "p2p flag";
break;
case PT_CFG_EDGE:
uid_cfg.admin_edge = value;
val_name = "adminEdge";
break;
case PT_CFG_NON_STP:
uid_cfg.admin_non_stp = value;
val_name = "adminNonStp";
break;
#ifdef STP_DBG
case PT_CFG_DBG_SKIP_TX:
uid_cfg.skip_tx = value;
val_name = "skip tx";
break;
case PT_CFG_DBG_SKIP_RX:
uid_cfg.skip_rx = value;
val_name = "skip rx";
break;
#endif
case PT_CFG_STATE:
default:
printf ("Invalid value mask 0X%lx\n", val_mask);
return;
}
rc = STP_IN_set_port_cfg (0, &uid_cfg,port_index);
if (0 != rc)
{
printf ("can't change rstp port %s\r\n",
val_name);
}
else
{
printf ("changed rstp port %s\n", val_name);
}
return 0;
/* show_rstp_port (&uid_cfg.port_bmp, 0); */
}
#endif
/*以下是为snmp agent 提供的rstp 相关的接口函数*/
int rstp_DomainAdminState_get(char *name)
{
struct net_bridge * br;
br = br_get_byname(name);
/*br = bridge_list;*/
br = br_get_byname("default");/*modified by wl 2007-8-3*/
if(br)
return br->admin_state;
else
return -1;
}
int rstp_DomainForceVersion_get(char *name)
{
struct net_bridge * br;
br = br_get_byname(name);
/*if (rstp_DomainAdminState_get(name)!=STP_ENABLED)
return -1;*/
/* printf("rstp_DomainAdminState_get(default) = %d\r\n",rstp_DomainAdminState_get(name));*/
if(br)
return br->ForceVersion;
else
return -1;
}
int rstp_STPDomainPriority_get(char *name)
{
struct net_bridge * br;
int bridgePrio;
UID_STP_STATE_T uid_state;
UID_STP_CFG_T uid_cfg;
int rc;
unsigned short ret1,ret2;
br = br_get_byname(name);
/*br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return 0;
}
return uid_state.bridge_id.prio;
}
int rstp_STPDomainMacAddr_get(char *name,char *mac)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
UID_STP_CFG_T uid_cfg;
int rc;
/*br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return 0;
}
{
/* sprintf(pcMacAddress, "%.2x%.2x%.2x%.2x%.2x%.2x",
br->bridge_id.addr[0],
br->bridge_id.addr[1],
br->bridge_id.addr[2],
br->bridge_id.addr[3],
br->bridge_id.addr[4],
br->bridge_id.addr[5]);*/
memcpy(mac,&(uid_state.bridge_id.addr[0]),6);
return 0;
}
}
int rstp_STPDomainMaxAge_get(char *name)
{
struct net_bridge * br;
int pathCost;
br = br_get_byname(name);/*modified by wl 2007-8-3*/
/*br = bridge_list;*/
if(br)
return br->bridge_max_age;
else
return -1;
}
int rstp_STPDomainHelloTime_get(char *name)
{
struct net_bridge * br;
int pathCost;
br = br_get_byname(name); /*modified by wl 2007-8-3*/
/* br = bridge_list;*/
if (rstp_DomainAdminState_get(name)!=STP_ENABLED)
return -1;
if(br)
return br->bridge_hello_time;
else
return -1;
}
int rstp_STPDomainForwardDelay_get(char *name)
{
struct net_bridge * br;
int pathCost;
br = br_get_byname(name);/*modified by wl 2007-8-3*/
/*br = bridge_list;*/
if(br)
return br->bridge_forward_delay;
else
return -1;
}
int rstp_DesignatedRootMacAddr_get(char *name,unsigned char *pcMacAddress)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
int rc;
/*br = br_get_byname(name);
br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
if (br==NULL)
return -1;
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return -1;
}
memcpy(pcMacAddress,&(uid_state.designated_root.addr[0]),6);
return 0;
}
int rstp_DesignatedRootPort_get(char *name)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
int rc;
#ifdef _DEBUG_
printf("1111111111111111111.\r\n");
#endif
/*br = br_get_byname(name);
br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
if (br==NULL)
return -1;
rc = STP_IN_stpm_get_state (br, &uid_state);
#ifdef _DEBUG_
printf("22222222222222222222222222222222.\r\n");
#endif
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return -1;
}
#ifdef _DEBUG_
printf("33333333333333333333333333333.\r\n");
#endif
return uid_state.root_port&0xff;
}
int rstp_DesignatedRootMaxAge_get(char *name)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
int rc;
/*br = br_get_byname(name);
br = bridge_list;*/
br = br_get_byname("default");/*modified by wl 2007-8-3*/
if (br==NULL)
return -1;
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return -1;
}
return uid_state.max_age;
}
int rstp_DesignatedRootHelloTime_get(char *name)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
int rc;
/*br = br_get_byname(name);
br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
if (br==NULL)
return -1;
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return -1;
}
return uid_state.hello_time;
}
int rstp_DesignatedRootPriority_get(char *name)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
int rc;
/*br = br_get_byname(name);
br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
if (br==NULL)
return -1;
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return -1;
}
return uid_state.designated_root.prio;
}
int rstp_DesignatedRootForwardDelay_get(char *name)
{
struct net_bridge * br;
UID_STP_STATE_T uid_state;
int rc;
/*br = br_get_byname(name);
br = bridge_list;*/
br = br_get_byname(name);/*modified by wl 2007-8-3*/
if (br==NULL)
return -1;
rc = STP_IN_stpm_get_state (br, &uid_state);
if (rc)
{
/*printf ("can't get rstp bridge state: %s\n",
STP_IN_get_error_explanation (rc));*/
return -1;
}
return uid_state.forward_delay;
}
void stp_examine(void)
{
char *ppcMacAddress;
int i;
ppcMacAddress = (char *)malloc(20);
i = stp_STPSTPDomainAdminState_get("default");
i = stp_DesignatedRootPriority_get("default");
i = stp_DesignatedRootMacAddr_get("default", &ppcMacAddress);
i = stp_DesignatedRootPathCost_get("default");
i = stp_DesignatedRootPort_get("default");
i = stp_DesignatedRootMaxAge_get("default");
i = stp_DesignatedRootHelloTime_get("default");
i = stp_DesignatedRootForwardDelay_get("default");
i = stp_STPDomainPriority_get("default");
i = stp_STPDomainMacAddr_get("default", &ppcMacAddress);
i = stp_STPDomainMaxAge_get("default");
i = stp_STPDomainHelloTime_get("default");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -