int tun_rtr_process_input_packet(struct sock *sl) { packet_tuple_t tpl; lbuf_use_stack(&pkt_buf, &pkt_recv_buf, MAX_IP_PKT_LEN); /* Reserve space in case the received packet was IPv6. In this case the IPv6 header is * not provided */ lbuf_reserve(&pkt_buf,LBUF_STACK_OFFSET); if (tun_read_and_decap_pkt(sl->fd, &pkt_buf, &(tpl.iid)) != GOOD) { return (BAD); } OOR_LOG(LDBG_3, "Forwarding packet to OUPUT for re-encapsulation"); lbuf_point_to_l3(&pkt_buf); lbuf_reset_ip(&pkt_buf); if (pkt_parse_5_tuple(&pkt_buf, &tpl) != GOOD) { return (BAD); } tun_output(&pkt_buf, &tpl); return(GOOD); }
int vpnapi_output_recv(struct sock *sl) { lbuf_use_stack(&pkt_buf, &pkt_recv_buf, VPNAPI_RECEIVE_SIZE); lbuf_reserve(&pkt_buf, LBUF_STACK_OFFSET); if (sock_recv(sl->fd, &pkt_buf) != GOOD) { LMLOG(LWRN, "OUTPUT: Error while reading from tun!"); return (BAD); } lbuf_reset_ip(&pkt_buf); vpnapi_output(&pkt_buf); return (GOOD); }
int tun_process_input_packet(sock_t *sl) { uint32_t iid; lbuf_use_stack(&pkt_buf, &pkt_recv_buf, MAX_IP_PKT_LEN); if (tun_read_and_decap_pkt(sl->fd, &pkt_buf, &iid) != GOOD) { return (BAD); } /* XXX Destination packet should be checked it belongs to this xTR */ if ((write(tun_receive_fd, lbuf_l3(&pkt_buf), lbuf_size(&pkt_buf))) < 0) { OOR_LOG(LDBG_2, "lisp_input: write error: %s\n ", strerror(errno)); } return (GOOD); }