diff --git a/ethermess-backend.c b/ethermess-backend.c index 09ebddf..2e84bae 100644 --- a/ethermess-backend.c +++ b/ethermess-backend.c @@ -256,8 +256,19 @@ void drop_privileges(void) { } void send_frame(const unsigned char *frame, size_t frame_length) { - if (write(packet_socket, frame, frame_length) == -1) { - err(1, "write"); + // 64B is the minimum frame side + // We check for 60B, since kernel handles the FCS (4B) + if (frame_length < 60) { + unsigned char padded_frame[60]; + memset(padded_frame, 0, sizeof(padded_frame)); + memcpy(padded_frame, frame, frame_length); + if (write(packet_socket, padded_frame, sizeof(padded_frame)) == -1) { + err(1, "write"); + } + } else { + if (write(packet_socket, frame, frame_length) == -1) { + err(1, "write"); + } } }