int test_net_if_get_set_pan_id(int iface) { int32_t res; uint16_t pan_id = 0xabcd; if ((res = net_if_get_pan_id(iface + 1)) >= 0) { printf("FAILED: net_if_get_pan_id(%d) not failed\n", iface); return 0; } if ((res = net_if_set_pan_id(iface, pan_id)) < 0) { printf("FAILED: net_if_set_pan_id(%d, 0x%04x) failed\n", iface, pan_id); return 0; } #if MODULE_AT86RF231 || MODULE_CC2420 || MODULE_MC1322X if ((res = net_if_get_pan_id(iface)) < 0) { printf("FAILED: net_if_get_pan_id(%d) failed\n", iface); return 0; } pan_id = (uint16_t)res; #else pan_id = 0; #endif return 1; }
void set_ieee802154_frame_values(int if_id, uint16_t dest_pan, ieee802154_frame_t *frame) { int32_t pan_id = net_if_get_pan_id(if_id); // TODO: addresse aus ip paket auslesen und in frame einfuegen if (pan_id < 0) { frame->dest_pan_id = NTOLES(dest_pan); frame->src_pan_id = HTOLES(DEFAULT_IEEE_802154_PAN_ID); } else { frame->dest_pan_id = NTOLES(dest_pan); frame->src_pan_id = HTOLES((uint16_t)pan_id); } frame->seq_nr = macdsn; macdsn++; }
int net_if_send_packet_long(int if_id, net_if_eui64_t *target, const void *payload, size_t payload_len) { DEBUG("net_if_send_packet: if_id = %d, target = %016" PRIx64 ", " "payload = %p, payload_len = %d\n", if_id, NTOHLL(target->uint64), payload, payload_len); uint32_t response; if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Send packet: No interface initialized with ID %d.\n", if_id); return -1; } if (interfaces[if_id].transceivers & (TRANSCEIVER_CC2420 | TRANSCEIVER_AT86RF231 | TRANSCEIVER_MC1322X)) { ieee802154_packet_t p; memset(&p, 0, sizeof(ieee802154_packet_t)); p.frame.payload = (uint8_t *)payload; p.frame.payload_len = (uint8_t)payload_len; p.frame.fcf.src_addr_m = (uint8_t)interfaces[if_id].trans_src_addr_m; p.frame.fcf.dest_addr_m = IEEE_802154_LONG_ADDR_M; p.frame.fcf.ack_req = 0; p.frame.fcf.sec_enb = 0; p.frame.fcf.frame_type = IEEE_802154_DATA_FRAME; p.frame.fcf.frame_pend = 0; p.frame.dest_pan_id = net_if_get_pan_id(if_id); uint64_t target_h = NTOHLL(target->uint64); memcpy(p.frame.dest_addr, &target_h, 8); response = net_if_transceiver_get_set_handler(if_id, SND_PKT, (void *)&p); } else { radio_packet_t p; memset(&p, 0, sizeof(radio_packet_t)); p.data = (uint8_t *) payload; p.length = payload_len; p.dst = NTOHS(target->uint16[3]); response = net_if_transceiver_get_set_handler(if_id, SND_PKT, (void *)&p); } return (response > payload_len) ? (int)payload_len : (int)response; }