⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rstp_cli.c

📁 rstp for switch in vxworks
💻 C
📖 第 1 页 / 共 4 页
字号:

	#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 + -