Пример #1
0
struct result_def 
udp_sender_plain(
    unsigned long ip, 
    unsigned short port, 
    char *buff,
    int dsize,
    int bsize,
    int (* callback)(void))
{
    struct internal_command_def command;
    command.buff = buff;
    command.bsize = bsize;
    command.dsize = dsize;
    command.ip = ip;   
    command.port = port;
    command.callback = callback; 
    return(udp_sender(&command));
}
Пример #2
0
int main(int argc, char **argv)
{
    int					sendfd, recvfd;
    const int			on = 1;
    socklen_t			salen;
    struct sockaddr		*sasend, *sarecv;
    int                 result;
    int                 onoff = 0;

    if (argc != 3) {
        printf("usage: ./multicasting <IP-multicast-address> <port#> <>");
        exit(1);
    }

    sendfd = udp_sender(argv[1], argv[2], &sasend, &salen);

    recvfd = socket(sasend->sa_family, SOCK_DGRAM, 0);
    assert(recvfd > 2);



    // Now IP from iface
//    int fd;
//     struct ifreq ifr;
//     fd = socket(AF_INET, SOCK_DGRAM, 0);
//     /* I want to get an IPv4 IP address */
//     ifr.ifr_addr.sa_family = AF_INET;
//     /* I want IP address attached to "eth0" */
//     strncpy(ifr.ifr_name, "enp0s25", IFNAMSIZ-1);
//     ioctl(fd, SIOCGIFADDR, &ifr);
//     close(fd);


     /* display result */
     //printf("%s\n", inet_ntoa( ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr) );

     // I don't want default iface but wlo1




    result = setsockopt(recvfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    assert(result >= 0);

    sarecv = malloc(salen);
    assert(sarecv != NULL);

    memcpy(sarecv, sasend, salen);
    result = bind(recvfd, sarecv, salen);
    assert(result >= 0);

    char *src_host = sock_ntop(sarecv);
    printf("src_host = %s\n", src_host);
    char *dst_host = sock_ntop(sasend);
    printf("dst_host = %s\n", dst_host);

    result = mcast_join(recvfd, sasend, salen);
    assert(result >= 0);

    result = setsockopt(sendfd, IPPROTO_IP, IP_MULTICAST_LOOP,
                              &onoff, sizeof(onoff));
    assert(result >= 0);


//    struct in_addr interface_addr;// = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
//    interface_addr.s_addr = htonl(IP_SRC_ADDR_ENP);
//    result = setsockopt(recvfd, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr));
//    assert(result >= 0);


    if (fork() == 0)
        recv_all(recvfd, salen);

    send_all(sendfd, sasend, salen);
    return 0;
}
Пример #3
0
int main(int argc, char *argv[])
{

    struct ip_addr peer_ip;  // IP address of peer
    uint16_t port = 0;  // Port number of the peer

    ws = get_default_waitset();

     // Parse args
    if (argc != 5) {
        printf("Usage: %s <direction> <IP> <Port> <packets * %d>\n",
                argv[0], MULTIPLIER);
        printf("eg (to send microbenchmark): %s 1 10.110.4.41 3000 1000\n", argv[0]);
        printf("eg (to recv microbenchmark): %s 0 10.110.4.41 3000 1000\n", argv[0]);
        return 1;
    }

    // Flag to choose between sender(1) and receiver(0)
    int as_sender = atoi(argv[1]);

    struct in_addr peer_ip_gen;
    int ret = inet_aton(argv[2], &peer_ip_gen);
    if (ret == 0) {
        printf("Invalid IP addr: %s\n", argv[2]);
        return 1;
    } // end if : ip validation
    peer_ip.addr = peer_ip_gen.s_addr;

    port = atoi(argv[3]);
    if (port <= 0) {
        printf("Invalid port given [%s] == [%"PRIu16"]\n",
                argv[3], port);
        return 1;
    } // end if : port validation

    iterations = atoi(argv[4]);
    if (iterations <= 0) {
        printf("Invalid no. of iterations [%s] == [%"PRIu64"]\n",
                argv[4], iterations);
        return 1;
    } // end if : port validation
    iterations = iterations * MULTIPLIER;

    if (lwip_init_auto() == false) {
        printf("ERROR: lwip_init_auto failed!\n");
        return 1;
    }

//    lwip_init("e1000");
    // create pcb for connection
    struct udp_pcb *upcb;
    upcb = udp_new();

    assert(upcb != NULL);

    printf("U: #####################################\n");
    printf("U: %d.%"PRIuDOMAINID": Performing [%"PRIu64"] iterations\n",
                disp_get_core_id(), disp_get_domain_id(),
                iterations);

#if UDP_BENCHMARK_TRACE
    errval_t err = trace_control(TRACE_EVENT(TRACE_SUBSYS_BNET,
                                    TRACE_EVENT_BNET_START, 0),
                        TRACE_EVENT(TRACE_SUBSYS_BNET,
                                    TRACE_EVENT_BNET_STOP, 0), 0);
    if(err_is_fail(err)) {
        USER_PANIC_ERR(err, "trace_control failed");
    }
    printf("U: Tracing enabled!!!!\n");
//    trace_event(TRACE_SUBSYS_BNET, TRACE_EVENT_BNET_START, 0);
#endif // UDP_BENCHMARK_TRACE

    if(as_sender == 1) {
        udp_sender(upcb, peer_ip, port);
    } else {
        udp_receiver(upcb, IP_ADDR_ANY, port);
    } // end else:


    printf("U: Init finished.\n");

    while (1) {
        errval_t r = event_dispatch(ws);
        if (err_is_fail(r)) {
            DEBUG_ERR(r, "in event_dispatch");
            break;
        }
    }

    udp_remove(upcb);
} // end function: main