Date: Wed, 29 Aug 2001 10:14:16 +0300 From: Ruslan Ermilov <ru@FreeBSD.ORG> To: Anuranjan <anu@nttmcl.com> Cc: questions@FreeBSD.ORG Subject: Re: very urgent : trying to add a route to kernel table Message-ID: <20010829101416.B70541@sunbay.com> In-Reply-To: <001901c13026$f0aaf230$f64545d8@ntt27f48otgmw8>; from anu@nttmcl.com on Tue, Aug 28, 2001 at 06:07:13PM -0700 References: <001901c13026$f0aaf230$f64545d8@ntt27f48otgmw8>
next in thread | previous in thread | raw e-mail | index | archive | help
Your program is equivalent of doing: # route add 4.5.6.7 route: writing to routing socket: Invalid argument add host 4.5.6.7: Invalid argument When adding a route, you should also specify a gateway (RTA_GATEWAY). On Tue, Aug 28, 2001 at 06:07:13PM -0700, Anuranjan wrote: > Hi, > I'm trying to add an entry into the kernel routing table (my first time). > Don't know what I'm doing wrong ... but when I try "RTM_DELETE" it works .. > only RTM_ADD doesn't (errno says EINVAL) ... any suggestions ? Am attaching > the code snippet here.. > > --Anu > > ---------------------------------------------------------------------------- > ---------------------------------------------------------------------------- > ------------------------------ > > process_pkt_info(char *srcIPaddr, char *dstIPaddr, int src_if_id) > { > int err; > struct sockaddr_in *s; > int sockfd, rtsockfd; > char *buf; > pid_t pid; > ssize_t n; > struct rt_msghdr *rtm; > struct sockaddr *sa, rti_info[RTAX_MAX]; > > > rtsockfd = socket(AF_ROUTE, SOCK_RAW, 0); > > buf = (char *)calloc(1, BUFLEN); > if(buf < 0) > { > printf("calloc failed"); > abort(); > } > > rtm = (struct rt_msghdr *)buf; > rtm->rtm_msglen = sizeof(struct rt_msghdr) + sizeof(struct sockaddr_in); > rtm->rtm_version = RTM_VERSION; > rtm->rtm_type = RTM_ADD; > rtm->rtm_addrs = RTA_DST; > rtm->rtm_pid = pid = getpid(); > rtm->rtm_seq = SEQ; > > s = (struct sockaddr_in *) (rtm + 1); > s->sin_len = sizeof(struct sockaddr_in); > s->sin_family = AF_INET; > s->sin_addr.s_addr = inet_addr(srcIPaddr); > > fwd_enable(1); > > if(write(rtsockfd, rtm, rtm->rtm_msglen) < 0 ) > { > printf ("error: %d\n", errno); > } > > } > > int main (void) > { > process_pkt_info("4.5.6.7", NULL, 2); > return(0); > } > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-questions" in the body of the message -- Ruslan Ermilov Oracle Developer/DBA, ru@sunbay.com Sunbay Software AG, ru@FreeBSD.org FreeBSD committer, +380.652.512.251 Simferopol, Ukraine http://www.FreeBSD.org The Power To Serve http://www.oracle.com Enabling The Information Age To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010829101416.B70541>