📄 ospfh_command.c
字号:
/* The ospfh command.c */
#include "ospfh.h"
#include "ospfh_patch.h"
int router_id_set(int argc, char** argv , void * top)
{
struct ospf * ospf_top;
char * router_id;
if(argc!=1){
printf("router id set failed for incorrect argument!\n");
return 1;
}
router_id=argv[0];
ospf_top=(struct ospf *)top;
ospf_top->self_rc_id.s_addr = inet_addr(router_id);
return 0;
}
char* ip_addr_set(int argc, char** argv , void * top)
{
struct ospf * ospf_top;
char * ip_addr;
if(argc!=1){
printf("ip address set failed for incorrect argument!\n");
// return 1;
}
ip_addr=argv[0];
ospf_top=(struct ospf *)top;
ospf_top->ip_address.s_addr = inet_addr(ip_addr);
return ip_addr;
}
int nbr_id_set(int argc, char** argv , void * top)
{
struct ospf * ospf_top;
char * nbr_id;
struct ospf_neighbor *nbrtemp;
if(argc!=1)
{
printf("nbr id set failed for incorrect argument!\n");
return 1;
}
nbr_id=argv[0];
ospf_top=(struct ospf *)top;
nbrtemp=ospf_nbr_new(ospf_top);
nbrtemp->nbr_id.s_addr=inet_addr(nbr_id);
listnode_add (ospf_top->nbrlist, nbrtemp);
return 0;
}
int speaker_rc_id_set(int argc, char** argv , void * top)
{
struct ospf * ospf_top;
char * speaker_rc_id;
if(argc!=1){
printf("speaker rc id set failed for incorrect argument!\n");
return 1;
}
speaker_rc_id=argv[0];
ospf_top=(struct ospf *)top;
ospf_top->speaker_rc_id.s_addr = inet_addr(speaker_rc_id);
return 0;
}
int uplayer_rc_id_set(int argc, char** argv , void * top)
{
struct ospf * ospf_top;
char * uplayer_rc_id;
if(argc!=1){
printf("uplayer rc id set failed for incorrect argument!\n");
return 1;
}
uplayer_rc_id=argv[0];
ospf_top=(struct ospf *)top;
ospf_top->uplayer_rc_id.s_addr = inet_addr(uplayer_rc_id);
return 0;
}
int downlayer_rc_id_set(int argc, char** argv , void * top)
{
struct ospf * ospf_top;
char * downlayer_rc_id;
if(argc!=1){
printf("downlayer rc id set failed for incorrect argument!\n");
return 1;
}
downlayer_rc_id=argv[0];
ospf_top=(struct ospf *)top;
ospf_top->downlayer_rc_id.s_addr = inet_addr(downlayer_rc_id);
return 0;
}
struct cmd_element *
cmd_filter_by_string (char *command, struct ospf * top)
{
int i,ret;
struct cmd_element * matched_cmd;
matched_cmd=NULL;
//query the configuration command first
for(i=0;i<CONF_CMD_NUM;i++)
{
ret=strcmp(top->conf_cmd[i].string, command);
if(ret==0)
{
matched_cmd=&(top->conf_cmd[i]);
break;
}
}
return matched_cmd;
}
/* Execute command by argument readline. */
int
cmd_execute_command_strict (struct vector* vline,
struct cmd_element **cmd , struct ospf * top)
{
u_char index;
struct vector* cmd_vector;
struct cmd_element *cmd_element;
int argc;
char *argv[CMD_ARGC_MAX];
char *command;
char *temp;
char* argval;
int a,b,c;
argc=0;
cmd_vector=vline;
for (index = 0; index < vector_max (cmd_vector); index++)
{
command = vector_slot (vline, index);
if(index==0)
{
cmd_element = cmd_filter_by_string (command, top);
}
else
{
argval=vector_slot (vline, index);
if(strlen(argval)==1) //个位整数
{
temp=(char *)XMALLOC(1,sizeof(char)*2);
a=argval[0]-48;
temp[0]=a;
temp[1]='\0';
argv[argc]=temp;
}
if(strlen(argval)==2) //十位整数
{
temp=(char *)XMALLOC(1,sizeof(char)*2);
a=argval[0]-48;
b=argval[1]-48;
c=a*10+b;
temp[0]=c;
temp[1]='\0';
argv[argc]=temp;
}
if(strlen(argval)>2)
{
argv[argc]=argval; //字符串
}
argc++;
}
}
/* Now execute matched command */
return (*cmd_element->func) (argc, argv , top);
}
struct vector *
cmd_make_strvec (char *string)
{
char *cp, *start, *token;
int strlen;
struct vector * strvec;
if (string == NULL)
return NULL;
cp = string;
/* Skip white spaces. */
while (isspace ((int) *cp) && *cp != '\0')
cp++;
/* Return if there is only white spaces */
if (*cp == '\0')
return NULL;
if (*cp == '!' || *cp == '#')
return NULL;
/* Prepare return vector. */
strvec = vector_init (VECTOR_MIN_SIZE);
/* Copy each command piece and set into vector. */
start = cp;
/*copy the command string to the strvec*/
while (*cp != '$' && *cp != '\0' && *cp !='\n')
cp++;
strlen = cp - start;
token = XMALLOC (1, strlen + 1);
memcpy (token, start, strlen);
*(token + strlen) = '\0';
vector_set(strvec, token);
while ((* cp == '$'|| * cp ==' ')&& (*cp != '\0'))
cp++;
if(*cp =='\0'||*cp =='\n') //command no parameter
return strvec;
do
{
start=cp;
while ((*cp) !=' '&&(*cp)!='\n'&& (*cp )!= '\0')
cp++;
strlen = cp - start;
token=XMALLOC (1, strlen + 1);
memcpy (token, start, strlen);
*(token + strlen) = '\0';
vector_set(strvec, token);
while (*cp ==' '||*cp =='\n')
cp++;
}while(* cp!='\0');
if ((*cp )== '\0')
return strvec;
else
{
printf("read config file line error!");
return NULL;
}
}
/* Free allocated string vector. */
void
cmd_free_strvec (struct vector *v)
{
u_char i;
char *cp;
if (!v)
return;
for (i = 0; i < vector_max (v); i++)
if ((cp = vector_slot (v, i)) != NULL)
XFREE (1, cp);
vector_free (v);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -