Latest LQ Deal: Latest LQ Deals
Go Back > Forums > Linux Forums > Linux - Networking
User Name
Linux - Networking This forum is for any issue related to networks or networking.
Routing, network cards, OSI, etc. Anything is fair game.


  Search this Thread
Old 12-20-2006, 05:40 AM   #1
LQ Newbie
Registered: Dec 2006
Posts: 1

Rep: Reputation: 0
How to add a gateway address using ioctl in C in linux ?

I want to add a default gateway address using ioctl instead of system call.

In c, using system call in main(), it works fine.
but I want to use ioctl SIOCADDRT to add gateway.

So I used the following code.

if ((r = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
route_gateway = (struct sockaddr_in *)&rtentry.rt_gateway;
route_gateway->sin_family = AF_INET;
route_gateway->sin_addr.s_addr = inet_addr("");

if (ioctl(r, SIOCADDRT, &rtentry) == -1) {
return ;

It gives me following error from ioctl :
Address family is not supported by this protocol.
Can anyone help me out to figure out what I m missing ?
Thanks in advance.

Last edited by sweta; 12-20-2006 at 05:47 AM.
Old 12-27-2006, 11:26 PM   #2
LQ Newbie
Registered: Sep 2006
Posts: 19

Rep: Reputation: 0
Try below codes,

int setDefGateway(const char * deviceName,const char * defGateway)
int sockfd;
struct rtentry rm;
struct sockaddr_in ic_gateway ;// Gateway IP address
int err;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1)
printf("socket is -1\n");
return -1;

memset(&rm, 0, sizeof(rm));

ic_gateway.sin_family = AF_INET;
ic_gateway.sin_addr.s_addr = inet_addr(defGateway);
ic_gateway.sin_port = 0;

(( struct sockaddr_in*)&rm.rt_dst)->sin_family = AF_INET;
(( struct sockaddr_in*)&rm.rt_dst)->sin_addr.s_addr = 0;
(( struct sockaddr_in*)&rm.rt_dst)->sin_port = 0;

(( struct sockaddr_in*)&rm.rt_genmask)->sin_family = AF_INET;
(( struct sockaddr_in*)&rm.rt_genmask)->sin_addr.s_addr = 0;
(( struct sockaddr_in*)&rm.rt_genmask)->sin_port = 0;

memcpy((void *) &rm.rt_gateway, &ic_gateway, sizeof(ic_gateway));
rm.rt_flags = RTF_UP | RTF_GATEWAY;
if ((err = ioctl(sockfd, SIOCADDRT, &rm)) < 0)
printf("SIOCADDRT failed , ret->%d\n",err);
return -1;
return 0;


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
HOw to get Broad cast address using ioctl( ) and print it... touqeer.ansar Programming 1 07-03-2006 11:35 AM
ioctl[SIOCGIFADDR]: Cannot assign requested address mmcgann Linux - Wireless Networking 1 06-20-2006 12:09 PM
How can I add a second gateway to my linux router? abefroman Linux - Networking 1 11-20-2005 11:45 AM
how to get gateway address in C under linux alqama Programming 2 04-13-2005 05:42 AM
How to specify a gateway IP address for a linux client pjrestrepo Linux - Networking 3 11-30-2001 10:10 AM > Forums > Linux Forums > Linux - Networking

All times are GMT -5. The time now is 10:59 PM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration