Expose mip guts

This commit is contained in:
cpq committed 2022-11-09 19:25:40 +00:00
1 parent eed25f23f6
commit abfac8aa40
15 files changed
+222 -258

No files matched your search

+2 -6
View File
@@ -1,10 +1,6 @@
static bool my_random(void) {
return mg_millis() & 1;
}
static bool mock_init(uint8_t *mac, void *data) {
(void) mac, (void) data;
return my_random();
return true;
}
static size_t mock_tx(const void *buf, size_t len, void *data) {
@@ -19,7 +15,7 @@ static size_t mock_rx(void *buf, size_t len, void *data) {
static bool mock_up(void *data) {
(void) data;
return my_random();
return true;
}
struct mip_driver mip_driver_mock = {mock_init, mock_tx, mock_rx, mock_up, 0};
+9 -8
View File
@@ -58,13 +58,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
mg_json_get(mg_str_n((char *) data, size), "$[0]", &n);
if (size > 0) {
struct mip_cfg cfg = {{0,0,0,0,0,0}, 0x01020304, 255, 0x01010101};
size_t pktlen = 1540;
char t[sizeof(struct mip_if) + pktlen * 2 + 0 /* qlen */];
struct mip_if *ifp = (struct mip_if *) t;
struct mip_if mif = {.ip = 0x01020304,
.mask = 255,
.gw = 0x01010101,
.driver = &mip_driver_mock};
struct mg_mgr mgr;
mg_mgr_init(&mgr);
if_init(ifp, &mgr, &cfg, &mip_driver_mock, NULL, pktlen, 0);
mip_init(&mgr, &mif);
// Make a copy of the random data, in order to modify it
void *pkt = malloc(size);
@@ -73,15 +73,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size > sizeof(*eth)) {
static size_t i;
uint16_t eth_types[] = {0x800, 0x800, 0x806, 0x86dd};
memcpy(eth->dst, ifp->mac, 6); // Set valid destination MAC
memcpy(eth->dst, mif.mac, 6); // Set valid destination MAC
eth->type = mg_htons(eth_types[i++]);
if (i >= sizeof(eth_types) / sizeof(eth_types[0])) i = 0;
}
mip_rx(ifp, pkt, size);
mgr.priv = NULL; // Don't let Mongoose free() ifp
mip_rx(&mif, pkt, size);
mg_mgr_free(&mgr);
free(pkt);
free((char *) mif.rx.ptr);
free((char *) mif.tx.ptr);
}
return 0;
+2 -2
View File
@@ -39,12 +39,12 @@ static void test_queue(void) {
}
static void test_statechange(void) {
uint8_t tx[1540];
char tx[1540];
struct mip_if iface;
memset(&iface, 0, sizeof(iface));
iface.ip = mg_htonl(0x01020304);
iface.state = MIP_STATE_READY;
iface.tx.buf = tx, iface.tx.len = sizeof(tx);
iface.tx.ptr = tx, iface.tx.len = sizeof(tx);
iface.driver = &mip_driver_mock;
onstatechange(&iface);
}