uint8_t PfRingDevice::getTotalNumOfRxChannels() { if (m_NumOfOpenedRxChannels > 0) { uint8_t res = pfring_get_num_rx_channels(m_PfRingDescriptors[0]); return res; } else { uint32_t flags = PF_RING_PROMISC | PF_RING_REENTRANT | PF_RING_HW_TIMESTAMP | PF_RING_DNA_SYMMETRIC_RSS; pfring* ring = pfring_open(m_DeviceName, DEFAULT_PF_RING_SNAPLEN, flags); uint8_t res = pfring_get_num_rx_channels(ring); pfring_close(ring); return res; } }
u_int8_t pfring_open_multichannel(const char *device_name, u_int32_t caplen, u_int32_t flags, pfring *ring[MAX_NUM_RX_CHANNELS]) { u_int8_t num_channels, i, num = 0; char *at; char base_device_name[32]; snprintf(base_device_name, sizeof(base_device_name), "%s", device_name); at = strchr(base_device_name, '@'); if(at != NULL) at[0] = '\0'; /* Count how many RX channel the specified device supports */ ring[0] = pfring_open(base_device_name, caplen, flags); if(ring[0] == NULL) return(0); else num_channels = pfring_get_num_rx_channels(ring[0]); pfring_close(ring[0]); if(num_channels > MAX_NUM_RX_CHANNELS) num_channels = MAX_NUM_RX_CHANNELS; /* Now do the real job */ for(i=0; i<num_channels; i++) { char dev[32]; snprintf(dev, sizeof(dev), "%s@%d", base_device_name, i); ring[i] = pfring_open(dev, caplen, flags); if(ring[i] == NULL) return(num); else num++; } return(num); }