📄 mn_lib.c
字号:
/***********************************************************
mn_lib.c
-------------------
description : common set of management
begin : Wed April 25 2001
copyright : (C) 2001 by chenbin
email : chenbin@harbournetworks.com
*************************************************************/
#ifdef _cplusplus
extern"C"{
#endif
#include "mn_set.h"
#include <linx_str.h>
#include <boot_macaddr.h>
#include <sysinfo.h>
#include <linux/in.h>
#define _ERR_EN_MN_HOSTNAME_TOOLONG_ "Hostname too long.(should be 20 char at most)."
#define _ERR_CH_MN_HOSTNAME_TOOLONG_ "主机名长度,超过最大长度(20个字符)."
#define _ERR_EN_MN_HOSTNAME_TOOSHORT_ "Hostname too short.(should be 4 char at least)."
#define _ERR_CH_MN_HOSTNAME_TOOSHORT_ "主机名太短,小于最小长度(4个字符)."
#define _ERR_EN_MN_STR_TOOLONG_ "Too long string.(should be 100 char at most)."
#define _ERR_CH_MN_STR_TOOLONG_ "字符串长度超过最大长度(100个字符)."
#define _ERR_EN_MN_STR_ILLEGALCHAR_ "String include illegal char.(should only include 'a'-'z' 'A'-'z' '0'-'9' or '_')."
#define _ERR_CH_MN_STR_ILLEGALCHAR_ "字符串包含非法字符(只允许大小写字母,数字和下划线)."
#define _ERR_EN_MN_STR_FIRSTCHAR_ "First char of string must be alpha."
#define _ERR_CH_MN_STR_FIRSTCHAR_ "字符串的第一个字符必须是字母."
#define _ERR_EN_MN_HOSTNAME_ILLEGALCHAR_ "Hostname include illegal char.(should only include 'a'-'z' 'A'-'z' '0'-'9' ' ' or '_')."
#define _ERR_CH_MN_HOSTNAME_ILLEGALCHAR_ "主机名包含非法字符(只允许大小写字母,数字,空格和下划线)."
#define _ERR_EN_MN_HOSTNAME_FIRSTCHAR_ "First char of hostname must be alpha."
#define _ERR_CH_MN_HOSTNAME_FIRSTCHAR_ "主机名的第一个字符必须是字母."
/* mn_hostname defined in mn_main.c */
extern char mn_hostname[_MN_MAX_HOSTNAME_LEN_];
extern char mn_syscontact[_MN_MAX_SYSCONTACT_LEN_];
extern char mn_syslocation[_MN_MAX_SYSLOCATION_LEN_];
extern char *mn_sys_descr;
int mn_check_hostname_legal(char *hoststr, char **errmsg,unsigned short lan_type)
{
int i;
int len;
len = strlen(hoststr);
if (len > 20)
{
*errmsg = (lan_type == 2)?(_ERR_CH_MN_HOSTNAME_TOOLONG_):(_ERR_EN_MN_HOSTNAME_TOOLONG_);
return 0;
}
if (len < 4)
{
*errmsg = (lan_type == 2)?(_ERR_CH_MN_HOSTNAME_TOOSHORT_):(_ERR_EN_MN_HOSTNAME_TOOSHORT_);
return 0;
}
if (!(((hoststr[0] >= 'a') && (hoststr[0] <= 'z')) || ((hoststr[0] >= 'A') && (hoststr[0] <= 'Z'))))
{
*errmsg = (lan_type == 2)?(_ERR_CH_MN_HOSTNAME_FIRSTCHAR_):(_ERR_EN_MN_HOSTNAME_FIRSTCHAR_);
return 0;
}
for (i = 0; i < len; i++)
{
if (!(((hoststr[i] >= 'a') && (hoststr[i] <= 'z')) || ((hoststr[i] >= 'A') && (hoststr[i] <= 'Z')) || ((hoststr[i] >= '0') && (hoststr[i] <= '9')) || (hoststr[i] == '_') ))
{
*errmsg = (lan_type == 2)?(_ERR_CH_MN_HOSTNAME_ILLEGALCHAR_):(_ERR_EN_MN_HOSTNAME_ILLEGALCHAR_);
return 0;
}
}
return 1;
}
int mn_set_hostname(char *new_hostname, char **errmsg,unsigned short lan_type)
{
if (mn_check_hostname_legal(new_hostname,errmsg,lan_type))
{
memset(mn_hostname,0,_MN_MAX_HOSTNAME_LEN_);
memcpy(mn_hostname,new_hostname,strlen(new_hostname));
return 1;
}
else
{
return 0;
}
}
char *mn_get_hostname(void)
{
char *hostname;
hostname = mn_hostname;
return hostname;
}
int mn_check_str_legal(char *str,char **errmsg,unsigned short lan_type)
{
int i;
int len;
len = strlen(str);
if (len > 100)
{
*errmsg = (lan_type == 2)?(_ERR_CH_MN_STR_TOOLONG_):(_ERR_EN_MN_STR_TOOLONG_);
return 0;
}
for (i = 0; i < len; i++)
{
if (!(((str[i] >= 'a') && (str[i] <= 'z')) || ((str[i] >= 'A') && (str[i] <= 'Z')) || ((str[i] >= '0') && (str[i] <= '9')) || (str[i] == '_') ||(str[i] == ' ')))
{
*errmsg = (lan_type == 2)?(_ERR_CH_MN_STR_ILLEGALCHAR_):(_ERR_EN_MN_STR_ILLEGALCHAR_);
return 0;
}
}
return 1;
}
int mn_set_syscontact(char *new_syscontact, char **errmsg,unsigned short lan_type)
{
if (mn_check_str_legal(new_syscontact,errmsg,lan_type))
{
memset(mn_syscontact,0,_MN_MAX_SYSCONTACT_LEN_);
memcpy(mn_syscontact,new_syscontact,strlen(new_syscontact));
return 1;
}
else
{
return 0;
}
}
char *mn_get_syscontact(void)
{
return mn_syscontact;
}
int mn_set_syslocation(char *new_syslocation, char **errmsg, unsigned short lan_type)
{
if (mn_check_str_legal(new_syslocation,errmsg,lan_type))
{
memset(mn_syslocation,0,_MN_MAX_SYSLOCATION_LEN_);
memcpy(mn_syslocation,new_syslocation,strlen(new_syslocation));
return 1;
}
else
{
return 0;
}
}
char *mn_get_syslocation(void)
{
return mn_syslocation;
}
char *mn_get_sysdescr(void)
{
return mn_sys_descr;
}
char *mn_format_to_str(int mod_id,const char *format, ...)
{
va_list args;
int len;
char buf[300];
char *ret;
va_start(args,format);
memset(buf,0,300);
len = vsnprintf(buf,sizeof(buf),format,args);
if (len < 0)
{
va_end(args);
return NULL;
}
ret = (char *) kmalloc((len+1),mod_id);
memset(ret,0,(len+1));
memcpy(ret,buf,len);
va_end(args);
return ret;
}
int mn_fd_printf(int fd,const char *format, ...)
{
va_list args;
int len;
char buf[300];
char *ret;
if (fd < 0)
{
return 0;
}
va_start(args,format);
memset(buf,0,300);
len = vsnprintf(buf,sizeof(buf),format,args);
if (len < 0)
{
va_end(args);
return NULL;
}
ret = (char *) kmalloc((len+1),_MM_MOD_MN_PUB_ID_);
memset(ret,0,(len+1));
memcpy(ret,buf,len);
va_end(args);
write(fd,ret,(len+1));
kfree(ret);
return 1;
}
#if 0
/****************************
Defined in file /include/mod_flag.h
******************************/
#define _MM_MOD_MN_PUB_ID_ 100 /* management public */
#define _MM_MOD_UM_ID_ 110 /* user manage */
#define _MM_MOD_CLI_ID_ 120 /* cli */
#define _MM_MOD_CLI_PING_ID_ 121 /* ping command */
#define _MM_MOD_WS_ID_ 130 /* web server */
#define _MM_MOD_WS_PAGES_ID_ 140 /* web pages */
#define _MM_MOD_SNMP_ID_ 150 /* Snmp */
#define _MM_MOD_SNMP_MIB_ID_ 160 /* snmp mib */
#define _MM_MOD_SNMP_RMON_ID_ 170 /* snmp rmon */
#endif
int mn_module_id_to_str(int module_id,char *module_name)
{
switch (module_id)
{
case (_MM_MOD_MN_PUB_ID_):
sprintf(module_name,"Manage_Pulic");
break;
case (_MM_MOD_UM_ID_):
sprintf(module_name,"User_Manage");
break;
case (_MM_MOD_CLI_ID_):
sprintf(module_name,"Cli");
break;
case (_MM_MOD_CLI_PING_ID_):
sprintf(module_name,"Cli_Ping");
break;
case (_MM_MOD_WS_ID_):
sprintf(module_name,"Web_Server");
break;
case (_MM_MOD_WS_PAGES_ID_):
sprintf(module_name,"Web_Pages");
break;
case (_MM_MOD_SNMP_ID_):
sprintf(module_name,"SNMP");
break;
case (_MM_MOD_SNMP_MIB_ID_):
sprintf(module_name,"SNMP_MIB");
break;
case (_MM_MOD_SNMP_RMON_ID_):
sprintf(module_name,"SNMP_RMON");
break;
default:
sprintf(module_name,"Manage");
break;
}
return 1;
}
char *mn_get_vendor_name(void)
{
char *ret;
ret = _HOS_VENDOR_NAME_;
return ret;
}
char *mn_get_sys_name(void)
{
char *ret;
ret = _HOS_SYSNAME_;
return ret;
}
char *mn_get_software_version(void)
{
char *ret;
ret = _HOS_SOFTWARE_VERSION_;
return ret;
}
char *mn_get_vendor_location(void)
{
char *ret;
ret = _HOS_VENDOR_LOCATION_;
return ret;
}
char *mn_get_copyright_info(void)
{
char *ret;
ret = _HOS_COPYRIGHT_INFO_;
return ret;
}
char *mn_get_product_name(void)
{
#ifdef _MN_NEW_SYSINFO_
if (system_info_init_flag == 0)
{
load_sysinfo();
}
return sysinfo[0].product_name;
#else
return NULL;
#endif
}
char *mn_get_serial_no(void)
{
#ifdef _MN_NEW_SYSINFO_
if (system_info_init_flag == 0)
{
load_sysinfo();
}
return sysinfo[0].serial_no;
#else
return NULL;
#endif
}
char *mn_get_base_mac(void)
{
#ifdef _MN_NEW_SYSINFO_
char *base_mac;
if (system_info_init_flag == 0)
{
load_sysinfo();
}
base_mac=(char *)malloc(13);
memset(base_mac,0,13);
sprintf(base_mac,"%.2x%.2x%.2x%.2x%.2x%.2x",sysinfo[0].flex_mac_addr[0].addr[0],sysinfo[0].flex_mac_addr[0].addr[1],sysinfo[0].flex_mac_addr[0].addr[2],sysinfo[0].flex_mac_addr[0].addr[3],sysinfo[0].flex_mac_addr[0].addr[4],sysinfo[0].flex_mac_addr[0].addr[5]);
return base_mac;
#else
return NULL;
#endif
}
char *mn_get_product_date(void)
{
#ifdef _MN_NEW_SYSINFO_
if (system_info_init_flag == 0)
{
load_sysinfo();
}
return sysinfo[0].product_date;
#else
return NULL;
#endif
}
char *mn_get_hardware_version(void)
{
#ifdef _MN_NEW_SYSINFO_
if (system_info_init_flag == 0)
{
load_sysinfo();
}
return sysinfo[0].hardware_version;
#else
return NULL;
#endif
}
char *mn_get_bootrom_version(void)
{
#ifdef _MN_NEW_SYSINFO_
if (system_info_init_flag == 0)
{
load_sysinfo();
}
return sysinfo[0].bootrom_version;
#else
return NULL;
#endif
}
char * kinet_ntoa(struct in_addr *in_addrs,int mod_id)
{
__u32 ip;
char i[4];
char *ipaddr;
ip = in_addrs->s_addr;
i[0] = i[1] = i[2] = i[3] = 0;
bcopy((char *)&ip,((char *)(&i[0])),1);
bcopy((char *)&ip+1,((char *)(&i[1])),1);
bcopy((char *)&ip+2,((char *)(&i[2])),1);
bcopy((char *)&ip+3,((char *)(&i[3])),1);
ipaddr = (char *)kmalloc(16,mod_id);
memset(ipaddr,0,16);
sprintf(ipaddr,"%d.%d.%d.%d",i[0],i[1],i[2],i[3]);
ipaddr[15] = '\0';
return ipaddr;
}
#ifdef _cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -