📄 init.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 + -