Exemplo n.º 1
0
ipv6_addr_t init_threeway_handshake(void)
{
    border_syn_packet_t *syn;
    msg_t m;
    m.content.ptr = NULL;
    msg_send(&m, border_get_serial_reader(), 1);
    msg_receive(&m);

    syn = (border_syn_packet_t *)m.content.ptr;
    border_conf_header_t *synack = (border_conf_header_t *)get_serial_out_buffer(0);
    ipv6_addr_t addr;
    memcpy(&addr, &(syn->addr), sizeof(ipv6_addr_t));

    slwin_stat.next_exp = syn->next_seq_num;
    slwin_stat.last_frame = syn->next_exp - 1;
    slwin_stat.last_ack = slwin_stat.last_frame;

    synack->empty = 0;
    synack->type = BORDER_PACKET_CONF_TYPE;
    synack->conftype = BORDER_CONF_SYNACK;

    sending_slot_pid = thread_create(sending_slot_stack, SENDING_SLOT_STACK_SIZE, PRIORITY_MAIN - 1, CREATE_SLEEPING, sending_slot, "sending slot");
    flowcontrol_send_over_uart((border_packet_t *)synack, sizeof(border_conf_header_t));

    synack_seqnum = synack->seq_num;

    return addr;
}
Exemplo n.º 2
0
void send_ack(uint8_t seq_num) {
    border_packet_t *packet = (border_packet_t *)get_serial_out_buffer(0);
    packet->empty = 0;
    packet->type = BORDER_PACKET_ACK_TYPE;
    packet->seq_num = seq_num;
    writepacket((uint8_t *)packet, sizeof (border_packet_t));
}
Exemplo n.º 3
0
void multiplex_send_ipv6_over_tty(const struct ip6_hdr *packet)
{
    border_l3_header_t *l3_hdr = (border_l3_header_t *)get_serial_out_buffer(0);
    size_t packet_size = sizeof(struct ip6_hdr) + packet->ip6_plen;

    l3_hdr->empty = 0;
    l3_hdr->type = BORDER_PACKET_L3_TYPE;
    l3_hdr->ethertype = ETHERTYPE_IPV6;
    memcpy(
        get_serial_out_buffer(0) + sizeof(border_l3_header_t),
        packet,
        packet_size
    );

    flowcontrol_send_over_tty(
        (border_packet_t *) l3_hdr,
        sizeof(border_l3_header_t) + packet_size
    );
}
Exemplo n.º 4
0
void multiplex_send_ipv6_over_uart(ipv6_hdr_t *packet)
{
    border_l3_header_t *serial_buf;

    serial_buf = (border_l3_header_t *)get_serial_out_buffer(0);
    serial_buf->empty = 0;
    serial_buf->type = BORDER_PACKET_L3_TYPE;
    serial_buf->ethertype = BORDER_ETHERTYPE_IPV6;
    memcpy(get_serial_in_buffer(0) + sizeof(border_l3_header_t), packet, IPV6_HDR_LEN + packet->length);

    flowcontrol_send_over_uart((border_packet_t *) serial_buf, sizeof(border_l3_header_t));
}
Exemplo n.º 5
0
void multiplex_send_addr_over_tty(struct in6_addr *addr)
{
    border_addr_packet_t *packet = (border_addr_packet_t *)get_serial_out_buffer(0);

    packet->empty = 0;
    packet->type = BORDER_PACKET_CONF_TYPE;
    packet->conftype = BORDER_CONF_IPADDR;
    memcpy(
        &packet->addr,
        addr,
        sizeof(struct in6_addr)
    );

    flowcontrol_send_over_tty(
        (border_packet_t *) packet,
        sizeof(border_addr_packet_t)
    );
}
Exemplo n.º 6
0
void multiplex_send_context_over_tty(const border_context_t *context)
{
    border_context_packet_t *con_packet = (border_context_packet_t *)get_serial_out_buffer(0);

    con_packet->empty = 0;
    con_packet->type = BORDER_PACKET_CONF_TYPE;
    con_packet->conftype = BORDER_CONF_CONTEXT;
    memcpy(
        &con_packet->context,
        context,
        sizeof(border_context_t)
    );

    flowcontrol_send_over_tty(
        (border_packet_t *) con_packet,
        sizeof(border_context_packet_t)
    );
}