}
}
- 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();
}
}
+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:
TmEcode AFPPeersListInit();
TmEcode AFPPeersListCheck();
void AFPPeersListClean();
-
+int AFPGetLinkType(const char *ifname);
#endif /* __SOURCE_AFP_H__ */