📄 krt.cc
字号:
#include "common.h"#include "externDec.h"struct rtentry *gen_krtentry( rtable_entry rtEntry ){ struct rtentry *new_rtentry; struct sockaddr_in dst; struct sockaddr_in gw; struct sockaddr_in genmask; unsigned int netmask=0xffffffff;#ifdef DEBUG cout << "gen_krtentry: Entered" << endl;#endif if((new_rtentry = (struct rtentry *)malloc(sizeof(struct rtentry))) == NULL) { perror("Error in malloc"); return NULL; } bzero((void *)new_rtentry,sizeof(struct rtentry)); bzero((void *)&dst,sizeof(struct sockaddr_in)); bzero((void *)&gw,sizeof(struct sockaddr_in)); bzero((void *)&genmask,sizeof(struct sockaddr_in)); dst.sin_family = AF_INET; gw.sin_family = AF_INET; genmask.sin_family = AF_INET; dst.sin_addr.s_addr = rtEntry.getDestIP(); struct in_addr addr_temp; addr_temp.s_addr = g_my_ip;#ifdef DEBUG cout << "gen_krtentry: Local Host is " << inet_ntoa(addr_temp) << endl; addr_temp.s_addr = rtEntry.getDestIP(); cout << "gen_krtentry: DstIP is " << inet_ntoa(addr_temp) << endl; addr_temp.s_addr = rtEntry.getNextHop(); cout << "gen_krtentry: Nxt Hop is " << inet_ntoa(addr_temp) << endl;#endif if( rtEntry.getRTMetric() == 1) {#ifdef DEBUG cout << " routingTable: gen_krtentry: 1 hop cnt " << endl;#endif gw.sin_addr.s_addr = g_my_ip; } else {#ifdef DEBUG cout << " routingTable: gen_krtentry: multi hop cnt " << endl;#endif gw.sin_addr.s_addr = rtEntry.getNextHop(); }#ifdef DEBUG cout << "gen_krtentry: metric is " << rtEntry.getRTMetric() << endl;#endif genmask.sin_addr.s_addr = netmask; new_rtentry->rt_flags = RTF_UP | RTF_HOST | RTF_GATEWAY; new_rtentry->rt_metric = (short)rtEntry.getRTMetric(); new_rtentry->rt_dev = interface; new_rtentry->rt_dst = *(struct sockaddr*) &dst; new_rtentry->rt_gateway = *(struct sockaddr*) &gw; new_rtentry->rt_genmask = *(struct sockaddr*) &genmask; return new_rtentry;}int add_kroute( rtable_entry rtEntry ){ struct rtentry *new_krtentry;#ifdef DEBUG cout << "add_kroute: Entered" << endl;#endif if ((new_krtentry = gen_krtentry(rtEntry)) == NULL) { cout << "Error in gen_krtentry" << endl; return -1; } if(ioctl(ksock, SIOCADDRT,(char*) new_krtentry) == -1) {#ifdef DEBUG cout << "routingTable: add_kroute: ioctl failed " << endl; perror("Error in ioctl- adding routes");#endif return -1; } free(new_krtentry); return 0;}int del_kroute( rtable_entry rtEntry ){ struct rtentry *new_krtentry;#ifdef DEBUG cout << "del_kroute: Entered" << endl;#endif if ((new_krtentry = gen_krtentry(rtEntry)) == NULL) { cout << "del_kroute: error in gen_krtentry " << endl; return -1; } if(ioctl(ksock, SIOCDELRT, (char*) new_krtentry) == -1) {#ifdef DEBUG cout << "routingTable: del_kroute: ioctl failed " << endl; perror("Error in ioctl- deleting routes");#endif return -1; } return 0; free(new_krtentry);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -