Example #1
0
int net_if_send_packet_broadcast(net_if_trans_addr_m_t preferred_dest_mode,
                                 const void *payload, size_t payload_len)
{
    int if_id = -1;
    int res = 0, res_prev = 0;

    while ((if_id = net_if_iter_interfaces(if_id)) >= 0) {
        if (interfaces[if_id].transceivers & (TRANSCEIVER_CC1100 | TRANSCEIVER_NATIVE)) {
            res = net_if_send_packet(if_id, 0,
                                     payload, payload_len);
        }
        else if (preferred_dest_mode == NET_IF_TRANS_ADDR_M_SHORT) {
            res = net_if_send_packet(if_id, IEEE_802154_SHORT_MCAST_ADDR,
                                     payload, payload_len);
        }
        else {
            net_if_eui64_t mcast_addr = IEEE_802154_LONG_MCAST_ADDR;
            res = net_if_send_packet_long(if_id, &mcast_addr, payload,
                                          payload_len);
        }

        if (res_prev != 0) {
            if (res != res_prev) {
                return -1;
            }
        }
        else {
            if (res == 0) {
                break;
            }
        }

        res_prev = res;
    }

    return res;
}
Example #2
0
int sixlowpan_mac_send_data(int if_id,
                            const void *dest, uint8_t dest_len,
                            const void *payload,
                            uint8_t payload_len, uint8_t mcast)
{
    if (mcast) {
        return net_if_send_packet_broadcast(IEEE_802154_SHORT_ADDR_M,
                                            payload,
                                            payload_len);
    }
    else {
        if (dest_len == 8) {
            return net_if_send_packet_long(if_id, (net_if_eui64_t *) dest,
                                           payload, (size_t)payload_len);
        }
        else if (dest_len == 2) {
            return net_if_send_packet(if_id, NTOHS(*((uint16_t *)dest)),
                                      payload, (size_t)payload_len);
        }
    }

    return -1;
}
Example #3
0
File: main.c Project: Rossano/RIOT
int main(void)
{
    int iface;
    char *addr1_data = "abcdefgh", *addr2_data = "12345678";
    net_if_addr_t addr1 = {
        .addr_next = NULL,
        .addr_prev = NULL,
        .addr_protocol = NET_IF_L3P_IPV6_MULTICAST,
        .addr_data = (void *)addr1_data,
        .addr_len = (strlen(addr1_data) + 1) * 8
    };
    net_if_addr_t addr2 = {
        .addr_next = NULL,
        .addr_prev = NULL,
        .addr_protocol = NET_IF_L3P_IPV6_PREFIX,
        .addr_data = (void *)addr2_data,
        .addr_len = (strlen(addr2_data) + 1) * 8
    };
    uint16_t own = 1, target = 2;
    net_if_eui64_t eui64;

    iface = initialize_tests();

    if (!test_net_if_initialization(iface)) {
        printf("FAILED: test_net_if_initialization()\n");
        return -1;
    }

    if (!test_net_if_get_add_l3p_types(iface)) {
        printf("FAILED: test_net_if_get_add_l3p_types()\n");
        return -1;
    }

    if (!test_net_if_add_address(iface, &addr1, &addr2)) {
        printf("FAILED: test_net_if_add_address()\n");
        return -1;
    }

    if (!test_net_if_del_address(iface, &addr1, &addr2)) {
        printf("FAILED: test_net_if_del_address()\n");
        return -1;
    }

    if (!test_net_if_get_set_hardware_address(iface, own)) {
        printf("FAILED: test_net_if_get_set_hardware_address()\n");
        return -1;
    }

    if (!test_net_if_get_set_pan_id(iface)) {
        printf("FAILED: test_net_if_get_set_pan_id()\n");
        return -1;
    }

    if (!test_net_if_get_set_eui64(iface, &eui64, own)) {
        printf("FAILED: test_net_if_get_set_eui64()\n");
        return -1;
    }

    int count = net_if_send_packet(iface, target, "Test", 4);

    printf("Count was %i after net_if_send_packet()\n", count);

    printf("All test ran successfully.\n");

    return 0;
}

int initialize_tests(void)
{
    int iface;

#ifndef MODULE_AUTO_INIT
    transceiver_init(TRANSCEIVER);
    transceiver_start();
    net_if_init();
    iface = net_if_init_interface(0, TRANSCEIVER);
    return iface;
#else
    iface = -1;

    while ((iface = net_if_iter_interfaces(iface)) >= 0) {
        return iface;
    }

    return iface;
#endif
}

int test_net_if_initialization(int iface)
{
    net_if_addr_t *addr_ptr = NULL;

    if (net_if_get_l3p_types(iface)) {
        printf("FAILED: No L3 type expected on interface %d.\n", iface);
        return 0;
    }

    if (net_if_iter_addresses(iface + 1, &addr_ptr)) {
        printf("FAILED: Expected error on interface '%d'\n", iface + 1);
        return 0;
    }

    if (net_if_iter_addresses(iface, &addr_ptr)) {
        printf("FAILED: Expected error on interface '%d'\n", iface);
        return 0;
    }

    return 1;
}