Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/c-cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,11 @@ jobs:
steps:
- uses: actions/checkout@v4
- run: make
- name: Unit tests
run: |
sudo apt-get update
sudo apt-get install check
make clean
make units UNITS=1
./test/units.sh
if: runner.os == 'Linux'
50 changes: 27 additions & 23 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,24 @@ SONAME:=2
GNULIB_INSTALL_PREFIX?=/usr
GNULIB_TARGET_MULTIARCH?=

OS:=$(shell uname)
OS:=$(shell uname -s)
CC:=$(CROSS_COMPILE)gcc
LD:=$(CROSS_COMPILE)ld
AR:=$(CROSS_COMPILE)ar
RANLIB:=$(CROSS_COMPILE)ranlib
SIZE:=$(CROSS_COMPILE)size
STRIP_BIN:=$(CROSS_COMPILE)strip
TEST_LDFLAGS=-pthread $(PREFIX)/modules/*.o $(PREFIX)/lib/*.o -lvdeplug
UNIT_LDFLAGS=-lcheck -lm -pthread -lrt
ifneq ("$(wildcard /etc/debian-release)","")
UNIT_LDFLAGS+=-lsubunit
UNIT_LDFLAGS=-lcheck -lm -pthread
UNIT_CFLAGS= $(CFLAGS) -Wno-missing-braces -Wno-format-extra-args

ifeq ($(OS),Darwin)
BREW_PREFIX_CHECK:=$(shell brew --prefix check)
UNIT_CFLAGS+=-I$(BREW_PREFIX_CHECK)/include
UNIT_LDFLAGS+=-L$(BREW_PREFIX_CHECK)/lib
else ifeq ($(OS),Linux)
UNIT_LDFLAGS+=-lsubunit
endif
UNIT_CFLAGS= $(CFLAGS) -Wno-missing-braces

LIBNAME:="libpicotcp.a"

Expand Down Expand Up @@ -91,6 +96,7 @@ ifeq ($(UNITS),1)
6LOWPAN=1
IEEE802154=1
ARCH=faulty
DNS_SD=1
endif

UNITS_MM?=0
Expand Down Expand Up @@ -462,34 +468,32 @@ units: mod core lib $(UNITS_OBJ) $(MOD_OBJ)
@echo -e "\t[CC] units.o"
@$(CC) -g -c -o $(PREFIX)/test/units.o test/units.c $(UNIT_CFLAGS) -I stack -I modules -I test/unit -DUNIT_TEST
@echo -e "\t[LD] $(PREFIX)/test/units"
@$(CC) -o $(PREFIX)/test/units $(UNIT_CFLAGS) $(PREFIX)/test/units.o $(UNIT_LDFLAGS) \
$(UNITS_OBJ) $(PREFIX)/modules/pico_aodv.o \
$(PREFIX)/modules/pico_fragments.o
@$(CC) -o $(PREFIX)/test/modunit_pico_protocol.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_protocol.c stack/pico_tree.c $(UNIT_LDFLAGS) $(UNITS_OBJ)
@$(CC) -o $(PREFIX)/test/modunit_pico_frame.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_frame.c stack/pico_tree.c $(UNIT_LDFLAGS) $(UNITS_OBJ)
@$(CC) -o $(PREFIX)/test/units $(UNIT_CFLAGS) $(PREFIX)/test/units.o $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_pico_protocol.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_protocol.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_pico_frame.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_frame.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_seq.elf $(UNIT_CFLAGS) -I. test/unit/modunit_seq.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_tcp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_tcp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_dns_client.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dns_client.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_dns_common.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dns_common.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_mdns.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_mdns.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_dns_sd.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dns_sd.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_dev_loop.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dev_loop.c $(UNIT_LDFLAGS) $(UNITS_OBJ)
@$(CC) -o $(PREFIX)/test/modunit_dev_loop.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dev_loop.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_ipv6_nd.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_ipv6_nd.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_ipv6_pmtu.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_ipv6_pmtu.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_ethernet.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_ethernet.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_pico_stack.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_stack.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_tftp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_tftp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_sntp_client.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_sntp_client.c $(UNIT_LDFLAGS) $(UNITS_OBJ)
@$(CC) -o $(PREFIX)/test/modunit_ipfilter.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_ipfilter.c stack/pico_tree.c $(UNIT_LDFLAGS) $(UNITS_OBJ)
@$(CC) -o $(PREFIX)/test/modunit_aodv.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_aodv.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_fragments.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_fragments.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_queue.elf $(UNIT_CFLAGS) -I. test/unit/modunit_queue.c $(UNIT_LDFLAGS) $(UNITS_OBJ)
@$(CC) -o $(PREFIX)/test/modunit_dev_ppp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dev_ppp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_mld.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_mld.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_igmp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_igmp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_hotplug_detection.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_hotplug_detection.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_802154.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_802154.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_6lowpan.elf $(UNIT_CFLAGS) -I. -I test/examples test/unit/modunit_pico_6lowpan.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_tftp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_tftp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_sntp_client.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_sntp_client.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_ipfilter.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_ipfilter.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_aodv.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_aodv.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_fragments.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_fragments.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_queue.elf $(UNIT_CFLAGS) -I. test/unit/modunit_queue.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_dev_ppp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_dev_ppp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_mld.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_mld.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_igmp.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_igmp.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_hotplug_detection.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_hotplug_detection.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_802154.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_802154.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_6lowpan.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_6lowpan.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a
@$(CC) -o $(PREFIX)/test/modunit_strings.elf $(UNIT_CFLAGS) -I. test/unit/modunit_pico_strings.c $(UNIT_LDFLAGS) $(UNITS_OBJ) $(PREFIX)/lib/libpicotcp.a

devunits: mod core lib
Expand Down
7 changes: 0 additions & 7 deletions modules/pico_dhcp_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,6 @@
/* maximum size of a DHCP message */
#define DHCP_CLIENT_MAXMSGZISE (PICO_IP_MRU - PICO_SIZE_IP4HDR)

/* Mockables */
#if defined UNIT_TEST
# define MOCKABLE __attribute__((weak))
#else
# define MOCKABLE
#endif

enum dhcp_client_state {
DHCP_CLIENT_STATE_INIT_REBOOT = 0,
DHCP_CLIENT_STATE_REBOOTING,
Expand Down
4 changes: 2 additions & 2 deletions modules/pico_dns_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -767,12 +767,12 @@ static int pico_dns_client_getaddr_init(struct pico_stack *S, const char *url, u
return 0;
}

int pico_dns_client_getaddr(struct pico_stack *S, const char *url, void (*callback)(char *, void *), void *arg)
int MOCKABLE pico_dns_client_getaddr(struct pico_stack *S, const char *url, void (*callback)(char *, void *), void *arg)
{
return pico_dns_client_getaddr_init(S, url, PICO_PROTO_IPV4, callback, arg);
}

int pico_dns_client_getaddr6(struct pico_stack *S, const char *url, void (*callback)(char *, void *), void *arg)
int MOCKABLE pico_dns_client_getaddr6(struct pico_stack *S, const char *url, void (*callback)(char *, void *), void *arg)
{
return pico_dns_client_getaddr_init(S, url, PICO_PROTO_IPV6, callback, arg);
}
Expand Down
4 changes: 2 additions & 2 deletions modules/pico_ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ int pico_ipv4_compare(struct pico_ip4 *a, struct pico_ip4 *b)
return 0;
}

int pico_ipv4_to_string(char *ipbuf, const uint32_t ip)
int MOCKABLE pico_ipv4_to_string(char *ipbuf, const uint32_t ip)
{
const unsigned char *addr = (const unsigned char *) &ip;
int i;
Expand Down Expand Up @@ -131,7 +131,7 @@ static int pico_string_check_null_args(const char *ipstr, uint32_t *ip)

}

int pico_string_to_ipv4(const char *ipstr, uint32_t *ip)
int MOCKABLE pico_string_to_ipv4(const char *ipstr, uint32_t *ip)
{
unsigned char buf[PICO_SIZE_IP4] = {
0
Expand Down
4 changes: 2 additions & 2 deletions modules/pico_ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ static int pico_ipv6_hex_to_dec(char c)
return 0;
}

int pico_ipv6_to_string(char *ipbuf, const uint8_t ip[PICO_SIZE_IP6])
int MOCKABLE pico_ipv6_to_string(char *ipbuf, const uint8_t ip[PICO_SIZE_IP6])
{
uint8_t dec = 0, i = 0;

Expand All @@ -200,7 +200,7 @@ int pico_ipv6_to_string(char *ipbuf, const uint8_t ip[PICO_SIZE_IP6])
return 0;
}

int pico_string_to_ipv6(const char *ipstr, uint8_t *ip)
int MOCKABLE pico_string_to_ipv6(const char *ipstr, uint8_t *ip)
{
uint8_t buf[PICO_SIZE_IP6] = {
0
Expand Down
4 changes: 2 additions & 2 deletions stack/pico_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ static void devloop_all_in(struct pico_stack *S, void *arg);
static void devloop_all_out(struct pico_stack *S, void *arg);
#endif

int pico_device_init(struct pico_stack *S, struct pico_device *dev, const char *name, const uint8_t *mac)
int MOCKABLE pico_device_init(struct pico_stack *S, struct pico_device *dev, const char *name, const uint8_t *mac)
{
uint32_t len = (uint32_t)strlen(name);
int ret = 0;
Expand Down Expand Up @@ -286,7 +286,7 @@ static void pico_queue_destroy(struct pico_queue *q)
}
}

void pico_device_destroy(struct pico_device *dev)
void MOCKABLE pico_device_destroy(struct pico_device *dev)
{

pico_queue_destroy(dev->q_in);
Expand Down
4 changes: 2 additions & 2 deletions stack/pico_socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ static void pico_socket_check_empty_sockport(struct pico_socket *s, struct pico_
}
}

int8_t pico_socket_del(struct pico_socket *s)
int8_t MOCKABLE pico_socket_del(struct pico_socket *s)
{
struct pico_sockport *sp = pico_get_sockport(s->stack, PROTO(s), s->local_port);
if (!sp) {
Expand Down Expand Up @@ -675,7 +675,7 @@ static struct pico_socket *pico_socket_transport_open(struct pico_stack *S, uint
return s;
}

struct pico_socket *pico_socket_open(struct pico_stack *S, uint16_t net, uint16_t proto, void (*wakeup)(uint16_t ev, struct pico_socket *))
struct pico_socket *MOCKABLE pico_socket_open(struct pico_stack *S, uint16_t net, uint16_t proto, void (*wakeup)(uint16_t ev, struct pico_socket *))
{

struct pico_socket *s = NULL;
Expand Down
2 changes: 1 addition & 1 deletion stack/pico_stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ struct pico_frame *pico_stack_recv_new_frame(struct pico_device *dev, uint8_t *b
/* Device driver will call this function which returns immediately.
* Incoming packet will be processed later on in the dev loop.
*/
int32_t pico_stack_recv(struct pico_device *dev, uint8_t *buffer, uint32_t len)
int32_t MOCKABLE pico_stack_recv(struct pico_device *dev, uint8_t *buffer, uint32_t len)
{
struct pico_frame *f = pico_stack_recv_new_frame (dev, buffer, len);
int32_t ret;
Expand Down
5 changes: 3 additions & 2 deletions test/dummy.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ volatile uint32_t pico_ms_tick;

int main(void)
{
pico_stack_init();
pico_stack_tick();
struct pico_stack *S = NULL;
pico_stack_init(&S);
pico_stack_tick(S);
return 0;
}
2 changes: 1 addition & 1 deletion test/mkunits.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ INCLUDES=`cat $filename |grep "\#include \"" |grep -v $MYSELF| cut -d '"' -f 2`
echo includes are:
echo $INCLUDES
echo "#include \"$filename\"" >>./test/unit/modunit_$bname
echo "#include \"check.h\"" >>./test/unit/modunit_$bname
echo "#include <check.h>" >>./test/unit/modunit_$bname
echo >> ./test/unit/modunit_$bname
echo >> ./test/unit/modunit_$bname

Expand Down
3 changes: 2 additions & 1 deletion test/pico_faulty.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#include "pico_faulty.h"

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "pico_faulty.h"

/* #warning "COMPILING for MEMORY TESTS!" */

Expand Down
1 change: 1 addition & 0 deletions test/pico_faulty.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <sys/time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdint.h>

extern uint32_t mm_failure_count;
int pico_set_mm_failure(uint32_t nxt);
Expand Down
23 changes: 23 additions & 0 deletions test/pico_rand.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#ifndef PICO_TEST_RAND_H
#define PICO_TEST_RAND_H

#include <time.h>
#include <stdint.h>
#include <stdlib.h>

/**
* WARNING: This is an UNSAFE random generator.
* DO NOT USE for security, cryptography, or production.
* Only for testing purposes.
*/
uint32_t pico_rand(void)
{
static int seeded = 0;
if (!seeded) {
srand((uint32_t)time(NULL));
seeded = 1;
}
return (uint32_t)rand() ^ ((uint32_t)rand() << 15) ^ ((uint32_t)rand() << 30);
}

#endif /* PICO_TEST_RAND_H */
25 changes: 13 additions & 12 deletions test/test_tftp_app_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ int32_t get_filesize(const char *filename)
return buf.st_size;
}

void start_rx(struct pico_tftp_session *session, int *synchro, const char *filename, int options)
void start_rx(struct pico_stack *stack, struct pico_tftp_session *session, int *synchro, const char *filename, int options)
{
int ret;
int fd;
Expand All @@ -46,7 +46,7 @@ void start_rx(struct pico_tftp_session *session, int *synchro, const char *filen
}
}

ret = pico_tftp_app_start_rx(session, filename);
ret = pico_tftp_app_start_rx(stack, session, filename);
if (ret) {
fprintf(stderr, "Error in pico_tftp_app_start_rx\n");
exit(1);
Expand All @@ -60,7 +60,7 @@ void start_rx(struct pico_tftp_session *session, int *synchro, const char *filen

for(; left; left -= countdown) {
usleep(2000); /* PICO_IDLE(); */
pico_stack_tick();
pico_stack_tick(stack);
if (countdown)
continue;

Expand Down Expand Up @@ -93,7 +93,7 @@ void start_rx(struct pico_tftp_session *session, int *synchro, const char *filen
}
}

void start_tx(struct pico_tftp_session *session, int *synchro, const char *filename, int options)
void start_tx(struct pico_stack *stack, struct pico_tftp_session *session, int *synchro, const char *filename, int options)
{
int ret;
int fd;
Expand All @@ -118,7 +118,7 @@ void start_tx(struct pico_tftp_session *session, int *synchro, const char *filen
}
}

ret = pico_tftp_app_start_tx(session, filename);
ret = pico_tftp_app_start_tx(stack, session, filename);
if (ret) {
fprintf(stderr, "Error in pico_tftp_app_start_rx\n");
exit(1);
Expand All @@ -133,7 +133,7 @@ void start_tx(struct pico_tftp_session *session, int *synchro, const char *filen

for(; left; left -= countdown) {
usleep(2000); /* PICO_IDLE(); */
pico_stack_tick();
pico_stack_tick(stack);
if (countdown)
continue;

Expand Down Expand Up @@ -184,9 +184,10 @@ int main(int argc, char**argv)
union pico_address server_address;
struct pico_ip4 netmask;
struct pico_tftp_session *session;
struct pico_stack *stack;
int synchro;
int options = 0;
void (*operation)(struct pico_tftp_session *session, int *synchro, const char *filename, int options);
void (*operation)(struct pico_stack *stack, struct pico_tftp_session *session, int *synchro, const char *filename, int options);

unsigned char macaddr[6] = {
0, 0, 0, 0xa, 0xb, 0x0
Expand Down Expand Up @@ -221,24 +222,24 @@ int main(int argc, char**argv)
}

printf("%s start!\n", argv[0]);
pico_stack_init();
pico_dev = (struct pico_device *) pico_vde_create("/tmp/vde_switch", "tap0", macaddr);
pico_stack_init(&stack);
pico_dev = (struct pico_device *) pico_vde_create(stack, "/tmp/vde_switch", "tap0", macaddr);

if(!pico_dev) {
fprintf(stderr, "Error creating pico device, got enough privileges? Exiting...\n");
exit(1);
}

pico_ipv4_link_add(pico_dev, my_ip, netmask);
pico_ipv4_link_add(stack, pico_dev, my_ip, netmask);
printf("Starting picoTCP loop\n");

session = pico_tftp_app_setup(&server_address, short_be(PICO_TFTP_PORT), PICO_PROTO_IPV4, &synchro);
session = pico_tftp_app_setup(stack, &server_address, short_be(PICO_TFTP_PORT), PICO_PROTO_IPV4, &synchro);
if (!session) {
fprintf(stderr, "Error in pico_tftp_app_setup\n");
exit(1);
}

printf("synchro %d\n", synchro);

operation(session, &synchro, argv[1], options);
operation(stack, session, &synchro, argv[1], options);
}
Loading