extern "C" { #include #include #include #include #include #include } #include #include #include std::unique_ptr mock_rte_mbuf_create(const char * pkt, unsigned int pktlen) { auto mock_mbuf = std::unique_ptr(new struct rte_mbuf); mock_mbuf->buf_addr = (void *)pkt; mock_mbuf->buf_len = pktlen; mock_mbuf->data_off = 0; mock_mbuf->data_len = pktlen; mock_mbuf->pkt_len = pktlen; mock_mbuf->nb_segs = 1; mock_mbuf->next = nullptr; return mock_mbuf; } void pkt_parser_test(const uint8_t * data, size_t size, enum complex_layer_type_mask expect_layer_type, unsigned int nr_expect_results) { struct pkt_parser _pk_handler; struct pkt_parser_result _pkt_result; auto mock_mbuf_ptr = mock_rte_mbuf_create((const char *)data, size); pkt_parser_init(&_pk_handler, &_pkt_result, expect_layer_type, nr_expect_results); pkt_parser_exec(&_pk_handler, mock_mbuf_ptr.get()); } extern "C" int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) { pkt_parser_test(data, size, LAYER_TYPE_ALL, 8); return 0; }