Example #1
0
int wfaSetSockMcastRecvOpt(int sockfd, char *mcastgroup)
{
    struct ip_mreq mcreq;
    int so;

    mcreq.imr_multiaddr.s_addr = inet_addr(mcastgroup);
    mcreq.imr_interface.s_addr = htonl(INADDR_ANY);
    so = wSETSOCKOPT(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                  (void *)&mcreq, sizeof(mcreq));

    return so;
}
Example #2
0
/*
 * wfaCreateTCPServSock(): initially create a TCP socket
 * intput:   port -- TCP socket port to listen
 * return:   socket id;
 */
int wfaCreateTCPServSock(unsigned short port)
{
    int sock;                        /* socket to create */
    struct sockaddr_in servAddr; /* Local address */
    const int on = 1;

    /* Create socket for incoming connections */
    if ((sock = wSOCKET(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
    {
        DPRINT_ERR(WFA_ERR, "createTCPServSock socket() failed");
        return WFA_FAILURE;
    }
      
    /* Construct local address structure */
    wMEMSET(&servAddr, 0, sizeof(servAddr));
    wfaGetifAddr(gnetIf, &servAddr);
    servAddr.sin_family = AF_INET;        /* Internet address family */
    //servAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
    servAddr.sin_port = htons(port);              /* Local port */

    wSETSOCKOPT(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    /* Bind to the local address */
    if (wBIND(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
    {
        DPRINT_ERR(WFA_ERR, "bind() failed");
        return WFA_FAILURE;
    }

    /* Mark the socket so it will listen for incoming connections */
    if (wLISTEN(sock, MAXPENDING) < 0)
    {
        DPRINT_ERR(WFA_ERR, "listen() failed");
        return WFA_FAILURE;
    }

    return sock;
}
Example #3
0
int wfaSetSockMcastSendOpt(int sockfd)
{
    unsigned char ttlval = 1;

    return wSETSOCKOPT(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttlval, sizeof(ttlval));
}
/*
 * wfaTGSetPrio(): This depends on the network interface card.
 *               So you might want to remap according to the driver
 *               provided.
 *               The current implementation is to set the TOS/DSCP bits
 *               in the IP header
 */
int wfaTGSetPrio(int sockfd, int tgUserPriority)
{
    int tosval;

    socklen_t size = sizeof(tosval);
    wGETSOFD(sockfd, IPPROTO_IP, IP_TOS, &tosval, &size);

    switch(tgUserPriority)
    {
    case TG_WMM_AC_BK:   // user priority "1"
        /*Change this value to the ported device*/
        tosval = TOS_BK;
        break;

    case TG_WMM_AC_VI:   // user priority "5"
        /*Change this value to the ported device*/
        tosval = TOS_VI;
        break;

    case TG_WMM_AC_UAPSD:
        tosval = 0x88;
        break;

    case TG_WMM_AC_VO:   // user priority "6"
        /*Change this value to the ported device*/
        tosval = TOS_VO;
        break;

    case TG_WMM_AC_BE:   // user priority "0"
        tosval = TOS_BE;
        break;

    /* For WMM-AC Program User Priority Defintions */
    case TG_WMM_AC_UP0:
        tosval = 0x00;
        break;

    case TG_WMM_AC_UP1:
        tosval = 0x20;
        break;

    case TG_WMM_AC_UP2:
        tosval = 0x40;
        break;

    case TG_WMM_AC_UP3:
        tosval = 0x60;
        break;

    case TG_WMM_AC_UP4:
        tosval = 0x80;
        break;
    case TG_WMM_AC_UP5:
        tosval = 0xa0;
        break;

    case TG_WMM_AC_UP6:
        tosval = 0xc0;
        break;

    case TG_WMM_AC_UP7:
        tosval = 0xe0;
        break;

    default:
        tosval = 0x00;
        /* default */
        ;
    }

#ifdef WFA_WMM_PS_EXT
    psTxMsg[1] = tosval;
#endif

    if ( sockfd > 0)
    {
        if(wSETSOCKOPT ( sockfd, IPPROTO_IP, IP_TOS, &tosval, sizeof(tosval)) != 0)
        {
            DPRINT_ERR(WFA_ERR, "wfaTGSetPrio: Failed to set IP_TOS\n");
        }
    }
    else
    {
        DPRINT_INFO(WFA_OUT, "wfaTGSetPrio::socket closed\n");
    }
    return (tosval == 0xE0)?0xD8:tosval;
}