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

📄 init.c

📁 Harbournetworks HarmmerOS的系统初始化部分
💻 C
字号:
/**
init.c 为系统初始化的过程
Date: 2001.4.11
Auther:  fan chenglong fancl@harbournetworks.com
**/
/**
change log:
**/
#ifdef __cplusplus
extern "C"{
#endif

#include "init.h"
#include <hos_sys.h>
#include <lock.h>
#include "msgQLib.h"
enum init_errcode{
	PRE_GERERIC_ERROR = 1,
	POST_GERERIC_ERROR,
};


int HOS_console_fd;
int HOS_console_baudrate = _HOS_TTY_DEFAULT_BAUDRATE_;
int HOS_snmp_service_status;

extern void mn_main_init(void);
extern int  net_dev_init(void);
extern void br_init(void);
extern void skb_init(void);
extern void zebra_start(void);
extern void rip_start(void);
#ifdef _FLEX_OSPF_
extern void ospf_start(void);
#endif
#ifdef _GVRP_INCLUDE_
extern void gv_init(void); 
#endif
extern void  arphook_init(void);
extern void syslog_start(void);
extern void syslog_cmd_module_init(void);

/*added for dhcp server , 8-21-2001 */
extern void   dhcpr_module_init( void ) ;
extern  void CC_Task_Initial(void);
extern  void WebAuth_Task_Initial(void);
extern void  usccm_module_init(void);
extern int radius_module_init(void);


spinlock_t net_bh_lock;
spinlock_t ratelimit_lock;

void spin_lock_var_init(void)
{
	 spin_lock_init(&net_bh_lock);
	 spin_lock_init(&ratelimit_lock);
}

int init_done()
{
	extern MSG_Q_ID init_msg_queue;
	unsigned long msgbuf= SYS_INIT_DONE;
	if(send_sys_msg(init_msg_queue,(char *)(&msgbuf),sizeof(unsigned long))==ERROR){
		SYS_LOG("Send the init done message fail");
		return ERROR;
		}
	return OK;
	
}

void dst_init(void)
{
#if 0 /*added by fanchenglong  this function is for notify neigh*/
	register_netdevice_notifier(&dst_dev_notifier);
#endif
}
extern void hos_timer_init(void);
extern void devinet_init(void);
extern void virtual_device_init(void);
void __init ip_END_init(void);
extern void __init hos_mm_init(void);
extern void slab_cli_init (void);
extern void arp_init(void);
extern void arp_cmd_module_init (void);
#if (_BIG_HAMMER_|_FLEX_HAMMER_)
extern void sml_cmd_module_init(void);
extern void cpu_ratelimit_init(void);
extern int cpu_ratelimit_cmd_module_init(void);
#endif

#if (_BIG_HAMMER_)
extern void outband_ctl_init(void);
extern void outband_cli_init(void);
extern void fdb_aux_init(void);
extern void bighammer_private_cmd_init(void);
#endif

/*This function array will be proformed before the config init*/
void (* (pre_cfg_init_arr[]))(void)= {
	&syslog_start,
	&hos_mm_init,
	&spin_lock_var_init,
	&hos_timer_init,
	&skb_init,
	&net_dev_init,
/*device related init*/
	&devinet_init,
	&virtual_device_init,
	&ip_END_init,
	&arphook_init,
	&arp_init,
	&mn_main_init,	
	&br_init,
	&zebra_start,
	&rip_start,
#ifdef _FLEX_OSPF_
	&ospf_start,
#endif
#if (_BIG_HAMMER_)
	&outband_ctl_init,
	&fdb_aux_init,
#endif
#ifdef _GVRP_INCLUDE_
	&gv_init, 
#endif	
	&cpu_ratelimit_init,
	&pre_general_init,
};

/*This part will be preformed after config init*/
void (* (post_cfg_init_arr[]))(void)= {
	&post_general_init,
};

extern int mn_main_start(void);
/*The part is config and cli init*/
void (* (cfg_init_arr[]))(void)= {
	&syslog_cmd_module_init,
	&post_general_init,
	&slab_cli_init,
	&arp_cmd_module_init,

	/*dhcp relay init*/
	&dhcpr_module_init,
	/*cc control added by lijuan 9. 17*/
    &CC_Task_Initial,
	&WebAuth_Task_Initial,
	&usccm_module_init,
	&radius_module_init,

#if (_BIG_HAMMER_|_FLEX_HAMMER_)
	&sml_cmd_module_init,
	&cpu_ratelimit_cmd_module_init,
#endif
#if (_BIG_HAMMER_)
	&outband_cli_init,
	&bighammer_private_cmd_init,

#endif
};


MSG_Q_ID init_msg_queue;
void pre_general_init(void)
{
	/*TODO--- System message init*/
	extern SEM_ID softirq_sem;
	extern SEM_ID cl_init_done_sem;
	softirq_sem = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
	cl_init_done_sem = semBCreate(SEM_Q_FIFO, SEM_EMPTY);

	init_msg_queue = register_sys_msg_ctl("tinit",10);
	if(init_msg_queue ==ERROR){
		SYS_LOG("the init msg queue error ");
		return;
		}
	return;
}
void post_general_init(void)
{
	return;
}
void sys_pre_cfg_init(void)
{
	int i;
	int j=sizeof(pre_cfg_init_arr)/sizeof(pre_cfg_init_arr[0]);
	for(i=0;i<j;i++)
	{
		(*pre_cfg_init_arr[i])();
	}
}
void sys_post_cfg_init(void)
{
	int i;
	int j=sizeof(post_cfg_init_arr)/sizeof(post_cfg_init_arr[0]);
	for(i=0;i<j;i++)
	{
		(*post_cfg_init_arr[i])();
	}
}
void sys_cfg_init(void)
{
	int i;
	int j=sizeof(cfg_init_arr)/sizeof(cfg_init_arr[0]);
	for(i=0;i<j;i++)
	{
		(*cfg_init_arr[i])();
	}
}

#ifdef __cplusplus
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -