From 40d22455f1295d0bff005209bbf73e7e80799de7 Mon Sep 17 00:00:00 2001 From: Jordan Augé Date: Mon, 26 Apr 2021 15:51:22 +0200 Subject: [HICN-701] facemgr: add priority controller mobility example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Id2c41164a59329e206e430e82f107cf5d4db8ae1 Signed-off-by: Jordan Augé --- ctrl/facemgr/examples/mobility/Makefile | 23 ++++++++ ctrl/facemgr/examples/mobility/mobility.c | 88 +++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 ctrl/facemgr/examples/mobility/Makefile create mode 100644 ctrl/facemgr/examples/mobility/mobility.c diff --git a/ctrl/facemgr/examples/mobility/Makefile b/ctrl/facemgr/examples/mobility/Makefile new file mode 100644 index 000000000..3b92d9d5f --- /dev/null +++ b/ctrl/facemgr/examples/mobility/Makefile @@ -0,0 +1,23 @@ +EXEC = $(shell basename $$(pwd)) +CC = gcc + +CFLAGS = -std=gnu11 -O3 -Wall -Wextra -Wpedantic -Wstrict-aliasing + +SRC = $(wildcard *.c) +OBJ = $(SRC:.c=.o) + +all: $(EXEC) + +${EXEC}: $(OBJ) + $(CC) -o $@ $^ $(LDFLAGS) + +%.o: %.c + $(CC) -o $@ -c $< $(CFLAGS) + +.PHONY: clean mrproper + +clean: + @rm -rf *.o + +mrproper: clean + @rm -rf $(EXEC) diff --git a/ctrl/facemgr/examples/mobility/mobility.c b/ctrl/facemgr/examples/mobility/mobility.c new file mode 100644 index 000000000..528951446 --- /dev/null +++ b/ctrl/facemgr/examples/mobility/mobility.c @@ -0,0 +1,88 @@ +/* + * Dummy server sending alternating bytes to all clients. + * + * This program can be used to trigger mobility events in the hICN forwarder, to + * switch from WiFi to LTE and back, at regular intervals. + * + * Test server using nc: nc -4kvul localhost 9533 + */ + +#include // inet_ntop +#include // EINTR,. .. +#include // INET_ADDRSTRLEN, INET6_ADDRSTRLEN +#include +#include + +#include +#include +#include +#include // sockaddr_un +#include // fcntl +#include // fcntl + +#define MS2US(x) (x * 1000) + +/** + * \brief Main function + */ +int main(int argc, char **argv) +{ + int rc; + + if (argc != 4) { + fprintf(stderr, "Usage: %s IP PORT INTERVAL\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, " IP Target hostname\n"); + fprintf(stderr, " PORT Target port\n"); + fprintf(stderr, " INTERVAL Interval between mobility events (in ms)\n"); + fprintf(stderr, "\n"); + exit(EXIT_FAILURE); + } + + int interval = atoi(argv[3]); + + int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (fd < 0) { + perror("socket"); + goto ERR_SOCKET; + } + + struct sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr(argv[1]); + addr.sin_port = htons(atoi(argv[2])); + + if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { + perror("connect"); + goto ERR_CONNECT; + } + + unsigned state = 0; + char buf[1]; + for(;;) { + usleep(MS2US(interval)); + + buf[0] = state; + rc = send(fd, buf, 1, 0); + if (rc < 0) { + if (errno == ECONNREFUSED) { + continue; + } + perror("send"); + goto ERR_SEND; + } + + state = 1 - state; + } + + close(fd); + + exit(EXIT_SUCCESS); + +ERR_SEND: +ERR_CONNECT: + close(fd); +ERR_SOCKET: + exit(EXIT_FAILURE); +} -- cgit 1.2.3-korg