Exemplo n.º 1
0
static void loop_detect_run(void * param)
{
	char *ifname[6] = {"lan1","lan2", "lan3", "lan4", "lan5", "lan6"};
	if(init_epoll() !=0 ){
		ERROR(DEFAULT_GROUP, "init_epoll faild\n");
	}
	if(packet_sock_init() != 0){
		ERROR(DEFAULT_GROUP, "packet sock init  faild\n");
	}
	if(netsock_init() != 0){
		ERROR(DEFAULT_GROUP, "net sock init  faild\n");
	}
	// add port to loop detect module
	struct LoopDetectDriver lpdDriver;
	lpdDriver.globalEn = false;
	lpdDriver.set_port_state = set_port_state;
	lpdDriver.set_port_shutdown = set_port_shutdown;
	lpdDriver.set_port_no_shutdown =  set_port_no_shutdown;
	lpdDriver.set_port_no_learn = set_port_no_learn;
	lpdDriver.set_port_learn = set_port_learn;
	lpdDriver.alert_push = alert_push;

	LOOP_INIT(&lpdDriver);
	//PTN 705
	for(int i=0; i< 6; i++){
		port_t *prt = malloc(sizeof(port_t));
		prt->if_index = get_index(ifname[i], "port");
		get_hwaddr(ifname[i], prt->macaddr);
		strcpy(prt->name, ifname[i]);
		LOOP_IN_add_port(prt, i);
	}

	INFO(DEFAULT_GROUP, "loop detect ready\n");

	epoll_main_loop();
	pthread_exit(0);
}
Exemplo n.º 2
0
int main(int argc, char *argv[])
{
	int c;
	int _argc = 0;
	unsigned long packet_cnt = 0;
	char *_argv[3];
	pid_t pid;
	static User_Linker *usrinfo = NULL;
	while ((c = getopt(argc, argv, "dDv:")) != -1) {
		switch (c) {
		case 'd':
			become_daemon = 0;
			break;
		case 'D':
			execed = 1;
			break;
		default:
			return -1;
		}
	}
	if (become_daemon) {
		if (!execed) {
			if ((pid = vfork()) < 0) {
				fprintf(stderr, "vfork failed\n");
				exit(1);
			} else if (pid != 0) {
				exit(0);	//parent progress exit
			}

			_argv[_argc++] = argv[0];
			_argv[_argc++] = "-D";
			_argv[_argc++] = NULL;
			execv(_argv[0], _argv);
			/* Not reached */
			fprintf(stderr, "Couldn't exec\n");
			_exit(1);

		} else {
			setsid();
			chdir("/");
			umask(0);
			close(0);
			close(1);
			close(2);
		}
		FILE *f = fopen("/var/run/lldpd.pid", "w");
		if (!f) {
			ERROR("can't open /var/run/lldpd.pid");
			return -1;
		}
	}
	INFO("lldp start");
	/*Create epoll*/
	TST(init_epoll()==0,-1);
	/*Initialize client control socket*/
	//TST(ctlserver_socket_init()==0,-1);
	TST(packet_socket_init(SVR_PORT_SD, &packet_handler_1, &usrinfo)==0, -1);
	TST(packet_socket_init(SVR_PORT_FT, &packet_handler_2, &usrinfo)==0, -1);
	epoll_main_loop(usrinfo, &packet_cnt);
	//ctlserver_socket_cleanup();
	packet_socket_cleanup(&packet_handler_1);
	packet_socket_cleanup(&packet_handler_2);
	free_user_link_linker(usrinfo);
	return 0;
}
Exemplo n.º 3
0
static void mstpd_run(void * param)
{
	int i;
	struct stpDriver stpDrv = {
		.stp_set_state = do_set_stp_state,
		.stp_create_msti = do_create_stp_msti,
		.stp_delete_msti = do_delete_stp_msti,
		.stp_flush_all_fids = do_flush_all_fids_of_port,
		.alert_push = alert_push,
		.get_ifflags = do_get_flags,
		.if_shutdown = do_if_shutdown,
		.get_speed_duplex = do_get_speed_duplex,
		.get_hwaddr = do_get_hwaddr,
		.get_bridge_portno = do_get_bridge_portno,


#ifdef KERNEL_BRIDGE_TURN_ON
		.br_set_state = br_set_state,
		.br_set_ageing_time = br_set_ageing_time,
		.br_flush_port = br_flush_port,
#endif
		.if_index_to_name = do_if_index_to_name,
		.if_name_to_index = do_if_name_to_index,

	};

	init_stp_driver(&stpDrv);

	usleep(500000); /* wait for ubus stable*/
	if(init_epoll() != 0){
		goto run_mstp_faild;
	}


	if(packet_sock_init() != 0){
		goto run_mstp_faild;
	}


	/* 初始网络套接字,用于获取网络接口信息*/
	if(netsock_init() != 0){
		goto run_mstp_faild;
	}

#ifdef KERNEL_BRIDGE_TURN_ON
	/* 初始化桥操作入口,用于监视桥状态和相关操作 */
	if(init_bridge_ops() != 0){
		goto run_mstp_faild;
	}

#endif
	
	
	for(i=1; i< MAX_MSTID; i++)
		msti_new_flag[i] = 1;

#ifndef KERNEL_BRIDGE_TURN_ON   //内核开启Bridge 支持
	char ifname[10];
	for(i=1; i<6; i++){
		sprintf(ifname, "lan%d", i);
		ifname[4] = 0;
		set_if_to_promisc(ifname);
	}
#endif
	
	join_bridge_to_mstp();

	epoll_main_loop();
	goto over_mstpd;
	
run_mstp_faild:
	ERROR(GLOBAL_OUT_GROUP, "initination run MSTP faild.\n");

over_mstpd:
	pthread_exit(0);

}