void *packet_consumer_thread(void *data) { if (bind_core >= 0) bind2core(bind_core); while(!do_shutdown) { if(pfring_zc_recv_pkt(inzq, &tmpbuff, wait_for_packet) > 0) { if (unlikely(verbose)) { char bigbuf[4096]; pfring_print_pkt(bigbuf, sizeof(bigbuf), tmpbuff->data, tmpbuff->len, tmpbuff->len); fputs(bigbuf, stdout); } #if 0 int i; for(i = 0; i < tmpbuff->len; i++) printf("%02X ", tmpbuff->data[i]); printf("\n"); #endif numPkts++; numBytes += tmpbuff->len + 24; /* 8 Preamble + 4 CRC + 12 IFG */ while (unlikely(pfring_zc_send_pkt(outzq, &tmpbuff, flush_packet) < 0 && !do_shutdown)) usleep(1); } } if (!flush_packet) pfring_zc_sync_queue(outzq, tx_only); pfring_zc_sync_queue(inzq, rx_only); return NULL; }
void *packet_consumer_thread(void *_i) { struct dir_info *i = (struct dir_info *) _i; int tx_queue_not_empty = 0; if (i->bind_core >= 0) bind2core(i->bind_core); while(!do_shutdown) { if(pfring_zc_recv_pkt(i->inzq, &i->tmpbuff, 0 /* wait_for_packet */) > 0) { if (unlikely(verbose)) { #if 1 char bigbuf[4096]; pfring_print_pkt(bigbuf, sizeof(bigbuf), pfring_zc_pkt_buff_data(i->tmpbuff, i->inzq), i->tmpbuff->len, i->tmpbuff->len); fputs(bigbuf, stdout); #else u_char *pkt_data = pfring_zc_pkt_buff_data(i->tmpbuff, i->inzq); int j; for(j = 0; j < i->tmpbuff->len; j++) printf("%02X ", pkt_data[j]); printf("\n"); #endif } i->numPkts++; i->numBytes += i->tmpbuff->len + 24; /* 8 Preamble + 4 CRC + 12 IFG */ errno = 0; while (unlikely(pfring_zc_send_pkt(i->outzq, &i->tmpbuff, flush_packet) < 0 && errno != EMSGSIZE && !do_shutdown)) if (wait_for_packet) usleep(1); tx_queue_not_empty = 1; } else { if (tx_queue_not_empty) { pfring_zc_sync_queue(i->outzq, tx_only); tx_queue_not_empty = 0; } if (wait_for_packet) usleep(1); } } if (!flush_packet) pfring_zc_sync_queue(i->outzq, tx_only); pfring_zc_sync_queue(i->inzq, rx_only); return NULL; }