diff --git a/src/source-af-packet.c b/src/source-af-packet.c index 64c9b11689..1aa16cc8a6 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -417,6 +417,7 @@ static void AFPPeerUpdate(AFPThreadVars *ptv) (void)SC_ATOMIC_SET(ptv->mpeer->if_idx, AFPGetIfnumByDev(ptv->socket, ptv->iface, 0)); (void)SC_ATOMIC_SET(ptv->mpeer->socket, ptv->socket); (void)SC_ATOMIC_SET(ptv->mpeer->state, ptv->afp_state); + (void)SC_ATOMIC_SET(ptv->mpeer->send_errors, 0); } /** @@ -639,9 +640,6 @@ static void AFPWritePacket(Packet *p, int version) } } - if (SC_ATOMIC_GET(p->afp_v.peer->state) == AFP_STATE_DOWN) - return; - if (p->ethh == NULL) { SCLogWarning(SC_ERR_INVALID_VALUE, "Should have an Ethernet header"); return; @@ -661,9 +659,10 @@ static void AFPWritePacket(Packet *p, int version) if (sendto(socket, GET_PKT_DATA(p), GET_PKT_LEN(p), 0, (struct sockaddr *)&socket_address, sizeof(struct sockaddr_ll)) < 0) { - SCLogWarning(SC_ERR_SOCKET, "Sending packet failed on socket %d: %s", - socket, - strerror(errno)); + if (SC_ATOMIC_ADD(p->afp_v.peer->send_errors, 1) == 0) { + SCLogWarning(SC_ERR_SOCKET, "sending packet failed on socket %d: %s", socket, + strerror(errno)); + } } if (p->afp_v.peer->flags & AFP_SOCK_PROTECT) SCMutexUnlock(&p->afp_v.peer->sock_protect); diff --git a/src/source-af-packet.h b/src/source-af-packet.h index e8929f40cc..e976b30650 100644 --- a/src/source-af-packet.h +++ b/src/source-af-packet.h @@ -124,6 +124,7 @@ typedef struct AFPPeer_ { SC_ATOMIC_DECLARE(int, socket); SC_ATOMIC_DECLARE(int, sock_usage); SC_ATOMIC_DECLARE(int, if_idx); + SC_ATOMIC_DECLARE(uint64_t, send_errors); int flags; SCMutex sock_protect; int turn; /**< Field used to store initialisation order. */