[Oisf-users] Suricata and pf_ring packet dissection
Victor Julien
lists at inliniac.net
Fri Sep 13 10:32:02 UTC 2013
On 09/12/2013 07:51 PM, sukbir singh wrote:
> Dear Victor,
> If I look into pf_ring one the given snipper if
> pfcount and in it you have this function
> void dummyProcesssPacket(const struct pfring_pkthdr *h, const u_char
> *p, const u_char *user_bytes) { and the source-pfring.c have this
> function static inline void PfringProcessPacket(void *user, struct
> pfring_pkthdr *h, Packet *p) { . I dont understand where and how they
> derive the Packet *p ?. Thx
It's quite simple. We have a loop in which we get a packet and then call
pfring_recv:
p = PacketGetFromQueueOrAlloc();
...
int r = pfring_recv(ptv->pd, (u_char**)&GET_PKT_DIRECT_DATA(p),
(u_int)GET_PKT_DIRECT_MAX_SIZE(p),
&hdr,
LIBPFRING_WAIT_FOR_INCOMING);
This connects the data to our packet structure. Then we do some more
pfring handling on it:
PfringProcessPacket(ptv, &hdr, p);
And finally we push our packet struct through the rest of our engine:
if (TmThreadsSlotProcessPkt(ptv->tv, ptv->slot, p) !=
TM_ECODE_OK) {
TmqhOutputPacketpool(ptv->tv, p);
SCReturnInt(TM_ECODE_FAILED);
}
Cheers,
Victor
--
---------------------------------------------
Victor Julien
http://www.inliniac.net/
PGP: http://www.inliniac.net/victorjulien.asc
---------------------------------------------
More information about the Oisf-users
mailing list