Project Home
Project Home
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - Failed to add additional gateway -- socket(PF_ROUTE, SOCK_RAW, 0): (1 Item)
   
Failed to add additional gateway -- socket(PF_ROUTE, SOCK_RAW, 0)  
A gateway is successfully added using the following codes but it always failed and returned EEXIST when an additional 
gateway is added.  How can I add more route and gateway?

    struct {
        struct rt_msghdr     m_rtm;
        struct sockaddr_in   dst;
        struct sockaddr_in   gateway;
        struct sockaddr_in   mask;
    } m_rtmsg;

    sock = socket(PF_ROUTE, SOCK_RAW, 0);
    if (sock < 0) {
        return Failed;
    }

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

#define rtm m_rtmsg.m_rtm
    m_rtmsg.m_rtm.rtm_type = RTM_ADD;
    m_rtmsg.m_rtm.rtm_flags = RTF_STATIC | RTF_GATEWAY | RTF_CLONING | RTF_UP;
    m_rtmsg.m_rtm.rtm_version = RTM_VERSION;
    m_rtmsg.m_rtm.rtm_seq = ++rtm_gateway_seq;
    m_rtmsg.m_rtm.rtm_addrs = RTA_NETMASK | RTA_GATEWAY | RTA_DST;
    m_rtmsg.m_rtm.rtm_msglen = sizeof(m_rtmsg);
    m_rtmsg.m_rtm.rtm_pid = getpid();

    m_rtmsg.dst.sin_len = sizeof(struct sockaddr_in);
    m_rtmsg.dst.sin_family = AF_INET;

    m_rtmsg.gateway.sin_len = sizeof(struct sockaddr_in);
    m_rtmsg.gateway.sin_family = AF_INET;
    m_rtmsg.gateway.sin_addr.s_addr = ipv4Gateway_u32;

    m_rtmsg.mask.sin_len = 0;                // not used
    m_rtmsg.mask.sin_family = AF_INET;

    msgLen = m_rtmsg.m_rtm.rtm_msglen = sizeof(m_rtmsg.m_rtm) +
                               sizeof(m_rtmsg.dst) +
                               sizeof(m_rtmsg.gateway) + 4;
    ret = write(sock, (char *)&m_rtmsg, msgLen);   // return EEXIST when an additional gateway is added