Exemplo n.º 1
0
static void 
pcap_pack_callback(unsigned char *args, const struct pcap_pkthdr *pkt_hdr,
        unsigned char *frame)
{
    int            l2_len;
    pcap_t        *pcap;
    unsigned char *ip_data; 

    if (pkt_hdr->len >= ETHERNET_HDR_LEN) {
        pcap = (pcap_t *) args;
        ip_data = get_ip_data(pcap, frame, pkt_hdr->len, &l2_len);
        resp_dispose((tc_iph_t *) ip_data);
    } else {
        tc_log_info(LOG_ERR, 0, "recv len is less than:%d", ETHERNET_HDR_LEN);
    }
}
Exemplo n.º 2
0
static void
pcap_packet_callback(unsigned char *args, const struct pcap_pkthdr *pkt_hdr,
                     unsigned char *packet)
{
    pcap_t        *pcap;
    unsigned char *ip_data;
    int            l2_len;

    if (pkt_hdr->len < ETHERNET_HDR_LEN) {
        tc_log_info(LOG_ERR, 0, "recv len is less than:%d", ETHERNET_HDR_LEN);
        return;
    }
    pcap = (pcap_t *)args;
    ip_data = get_ip_data(pcap, packet, pkt_hdr->len, &l2_len);
    resp_dispose((tc_ip_header_t *) ip_data);
}
Exemplo n.º 3
0
static int
tc_process_resp_packet(tc_event_t *rev)
{
#if (TCPCOPY_PCAP)
    pcap_t              *pcap;
#else
    int                  recv_len;
    char                 recv_buf[RESP_RECV_BUF_SIZE];
    tc_ip_header_t      *ip_header;
#endif

#if (TCPCOPY_PCAP)
    pcap = pcap_map[rev->fd];
    pcap_dispatch(pcap, 1,(pcap_handler) pcap_packet_callback, (u_char *) pcap);
#else
    recv_len = recvfrom(rev->fd, recv_buf,
                        RESP_RECV_BUF_SIZE, 0, NULL, NULL);
    if (recv_len == -1) {
        if (errno == EAGAIN) {
            return TC_OK;
        }

        tc_log_info(LOG_ERR, errno, "recvfrom");
        return TC_ERROR;
    }


    if (recv_len < 40) {
        tc_log_info(LOG_ERR, 0, "recv len is less than 40:%d", recv_len);
        return TC_ERROR;
    }

    ip_header = (tc_ip_header_t *) (char *) (recv_buf);
    resp_dispose(ip_header);

#endif
    return TC_OK;
}