default:
gcc -o ul2switch main_ul2switch.c -lua -lreg -lpthread
clean:
rm -rf ul2switch
root@HNXS:/home/hnxs/l2switch# make
系统输出如下:gcc -o ul2switch main_ul2switch.c -lua -lreg -lpthread
当前目录会多(duō)产生一个ul2switch文(wén)件
root@HNXS:/home/hnxs/l2switch# ls
main_ul2switch.c Makefile ul2switch
root@HNXS:/home/hnxs/l2switch# ./ul2switch
fastU->REG Version:20180827,OpenBox HW Version:2020210329
fastU->Register UA to FAST Kernel! Wait Reply......
fastU->UA->pid:3069,mid:129,Register OK!
fastU->libua version:20180827
fastU->fast_ua_recv......
/*UA模块初始化*/
ua_init(mid);
/*配置硬件默认规则,将硬件所有(yǒu)报文(wén)送到模块ID為(wèi)mid的进程处理(lǐ)*/
fast_reg_wr(FAST_ACTION_REG_ADDR|FAST_DEFAULT_RULE_ADDR,ACTION_SET_MID<<28|mid);
/*启动線(xiàn)程接收分(fēn)派给UA进程的报文(wén)*/
fast_ua_recv();
/*主进程进入暂停状态,数据处理(lǐ)主要在回调函数*/
pause();
void ua_init(u8 mid)
{
int ret = 0;
/*向系统注册,自己进程处理(lǐ)报文(wén)模块ID為(wèi)mid的所有(yǒu)报文(wén)*/
if((ret=fast_ua_init(mid,callback)))//UA模块实例化(输入参数1:接收模块ID号,输入参数2:接收报文(wén)的回调处理(lǐ)函数)
{
perror("fast_ua_init!\n");
exit (ret);//如果初始化失败,则需要打印失败信息,并将程序结束退出!
}
}
int callback(struct fast_packet *pkt,int pkt_len)
{
return 0;
}
xprintf("inport:%d,dstmid:%d,len:%d,dmac:%02X:%02X:%02X:%02X:%02X:%02X,smac:%02X:%02X:%02X:%02X:%02X:%02X\n",
pkt->um.inport,pkt->um.dstmid,pkt_len,pkt->data[0],pkt->data[1],pkt->data[2],pkt->data[3],pkt->data[4],pkt->data[5],pkt->data[6],pkt->data[7],pkt->data[8],pkt->data[9],pkt->data[10],pkt->data[11]);
void pkt_send_normal(struct fast_packet *pkt,int pkt_len)
{
xprintf("pkt_send_normal->%p,outport:%d,len:%d\n",pkt,pkt->um.outport,pkt_len);
pkt->um.pktsrc = 1;/*报文(wén)来源為(wèi)CPU输入,站在硬件角度*/
pkt->um.pktdst = 0;/*报文(wén)目的為(wèi)硬件输出*/
pkt->um.dstmid = 5;/*直接从硬件GOE模块输出,不走解析、查表等模块*/
fast_ua_send(pkt,pkt_len);/*调用(yòng)FAST API函数发送*/
}