Example #1
0
static void send_arp_probe_ipv4(void){

    // "random address"
    static uint8_t requested_address[4] = {169, 254, 1, 0};
    requested_address[3]++;

    int pos = setup_ethernet_header(1, 0, 1, NETWORK_TYPE_IPv4); 
    big_endian_store_16(network_buffer, pos, HARDWARE_TYPE_ETHERNET);
    pos += 2;
    big_endian_store_16(network_buffer, pos, NETWORK_TYPE_IPv4);
    pos += 2;
    network_buffer[pos++] = 6; // Hardware length (HLEN) - 6 MAC  Address
    network_buffer[pos++] = 4; // Protocol length (PLEN) - 4 IPv4 Address
    big_endian_store_16(network_buffer, pos, ARP_OPERATION_REQUEST); 
    pos += 2;
    bd_addr_copy(&network_buffer[pos], local_addr); // Sender Hardware Address (SHA)
    pos += 6;
    memset(&network_buffer[pos], 0, 4);                 // Sender Protocol Adress (SPA)
    pos += 4;
    bd_addr_copy(&network_buffer[pos], other_addr); // Target Hardware Address (THA) (ignored for requests)
    pos += 6;
    memcpy(&network_buffer[pos], requested_address, 4);
    pos += 4;
    // magically, add some extra bytes for Ethernet padding
    pos += 18;
    send_buffer(pos);
}
Example #2
0
static uint16_t setup_ethernet_header(int src_compressed, int dst_compressed, int broadcast, uint16_t network_protocol_type){
    // setup packet
    int pos = 0;
    // destination
    if (broadcast){
        bd_addr_copy(&network_buffer[pos], broadcast_addr);
    } else {
        bd_addr_copy(&network_buffer[pos], dst_compressed ? pts_addr : other_addr);
    }
    pos += 6;
    // source
    bd_addr_copy(&network_buffer[pos], src_compressed ? local_addr   : other_addr);
    pos += 6;
    big_endian_store_16(network_buffer, pos, network_protocol_type);
    pos += 2;
    return pos;
}
Example #3
0
static void add_to_blacklist(bd_addr_t addr){
    printf("%s added to blacklist (no battery service found\n", bd_addr_to_str(addr));
    bd_addr_copy(blacklist[blacklist_index], addr);
    blacklist_index = (blacklist_index + 1) % blacklist_size();
}