af-packet: don't check GRO LRO on non ethernet

This way we avoid an error message when sniffing on a non Ethernet
device.
pull/1917/head
Eric Leblond 10 years ago
parent 11eb1d7c1d
commit b7bf299e3b

@ -370,9 +370,17 @@ void *ParseAFPConfig(const char *iface)
}
}
if (GetIfaceOffloading(iface) == 1) {
SCLogWarning(SC_ERR_AFP_CREATE,
"Using AF_PACKET with GRO or LRO activated can lead to capture problems");
int ltype = AFPGetLinkType(iface);
switch (ltype) {
case LINKTYPE_ETHERNET:
if (GetIfaceOffloading(iface) == 1) {
SCLogWarning(SC_ERR_AFP_CREATE,
"Using AF_PACKET with GRO or LRO activated can lead to capture problems");
}
case -1:
default:
break;
}
char *active_runmode = RunmodeGetActive();

@ -1314,6 +1314,22 @@ static int AFPGetDevLinktype(int fd, const char *ifname)
}
}
int AFPGetLinkType(const char *ifname)
{
int ltype;
int fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if (fd == -1) {
SCLogError(SC_ERR_AFP_CREATE, "Couldn't create a AF_PACKET socket, error %s", strerror(errno));
return LINKTYPE_RAW;
}
ltype = AFPGetDevLinktype(fd, ifname);
close(fd);
return ltype;
}
static int AFPComputeRingParams(AFPThreadVars *ptv, int order)
{
/* Compute structure:

@ -132,6 +132,6 @@ void TmModuleDecodeAFPRegister (void);
TmEcode AFPPeersListInit();
TmEcode AFPPeersListCheck();
void AFPPeersListClean();
int AFPGetLinkType(const char *ifname);
#endif /* __SOURCE_AFP_H__ */

Loading…
Cancel
Save