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
14 changes: 13 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: all bp_socket daemon clean format check-format
.PHONY: all bp_socket daemon clean format check-format install

all: bp_socket daemon

Expand All @@ -15,3 +15,15 @@ clean:
format:
$(MAKE) -C bp_socket format
$(MAKE) -C daemon format

install:
install -d /usr/local/include
install -m 644 include/bp_socket.h /usr/local/include/
$(MAKE) -C daemon clean
$(MAKE) -C daemon
$(MAKE) -C bp_socket clean
$(MAKE) -C bp_socket
@if lsmod | grep -q "^bp "; then \
sudo rmmod bp; \
fi
sudo insmod bp_socket/bp.ko
2 changes: 1 addition & 1 deletion Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Vagrant.configure("2") do |config|
EOF
ion.vm.provision "shell", inline: <<-EOF
export DEBIAN_FRONTEND=noninteractive
apt install -y curl git ca-certificates make pkg-config libnl-genl-3-dev libevent-dev build-essential linux-headers-$(uname -r)
apt install -y curl git ca-certificates make pkg-config libnl-genl-3-dev libnl-3-dev libevent-dev build-essential clang-format sparse linux-headers-$(uname -r)

cd /opt
wget -q https://github.com/nasa-jpl/ION-DTN/archive/refs/tags/ion-open-source-4.1.3.tar.gz
Expand Down
5 changes: 3 additions & 2 deletions bp_client.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "include/bp_socket.h"
#include "bp_socket.h"
#include <errno.h>
#include <pthread.h>
#include <signal.h>
Expand Down Expand Up @@ -40,7 +40,8 @@ void *send_thread(void *arg) {
message_count);

int flags = 0;
flags |= MSG_ACK_REQUESTED;
// flags |= MSG_ACK_REQUESTED;
flags |= MSG_NO_CUSTODY_REQUIRED;

int ret =
sendto(data->fd, send_buffer, strlen(send_buffer) + 1, flags,
Expand Down
11 changes: 9 additions & 2 deletions bp_socket/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ PWD := $(shell pwd)

SRC_FILES := $(wildcard *.c *.h)

.PHONY: all clean sparse
.PHONY: all clean sparse install

all:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Expand All @@ -18,4 +18,11 @@ sparse:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules C=1 CHECK=sparse

format:
clang-format -i --style=file $(SRC_FILES)
clang-format -i --style=file $(SRC_FILES)

install: all
@echo "Installing kernel module..."
install -d /lib/modules/$(shell uname -r)/extra
install -m 644 bp.ko /lib/modules/$(shell uname -r)/extra/
depmod -a
@echo "Kernel module installed. Use 'modprobe bp' to load it."
45 changes: 42 additions & 3 deletions configs/cloud-init/ion.cloud-config.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@ packages:
- make
- pkg-config
- libnl-genl-3-dev
- libnl-3-dev
- libevent-dev
- build-essential
- clang-format
- sparse

ssh_pwauth: false
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users,admin
lock_passwd: false
ssh_authorized_keys:
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCo3kxULSxGtVb70NZ/dI9HUBizF1ooyGT97vf0ORB7ONG4BnNHp4ijuVpBpo9r9LgB8p+M1dhZarrTaQ2u/1lUDrjNGERMt1HfDWmHzbcqr24oGqqOgDcCGrCmcGxqpWcHAu1HfcVfBO4YeJMHYQOkV/0vS3fdhocbGf0vkE13QAfjVmbZvR/dnaaVIdVeoovC2vz6DKCGgfZDM1GB35WzJ5oXoRsHuOReCywea2p5oB90ttM50bnX/Uv7DRn8e3f/8Pwf0Rp/R/JzlLtAeC9HulNyo4LVlWcom4G55D8/g11n03sp7SR2Zl2VorF6Ep6Phuha1izjHj+aCM2TbxSCq7DJnCW7n3GZ4/DqAMP4cglE0IEjGsM6jrDTdbjMlqt6u1RZ+XgUtJktf9g086s/4Rx29V1wtUbqYfjHf3dwYB59Lj3d/mGvuMY0VpcVehYh2CRShPGoFxJ8+FqJSYQsrlu0CeC0QASBx7LUo7PX4N8QLCrmXf2ELzzGoEQl1UWomyufrd/+KcP8hvbWaZZSgoy4ww+3hHCf+RuuLsj4twyhwsFdS4/M0nVQrvTFjsIjeePI9Cwi/yeRph17AIKIjrxgCxHROz1cg3dZD/1fb2m5m6d+SJkuzEAvsP7eypncGOZpO/djhAMD/AfJpJA15uOl/G84G80bZCCFnpK8Rw== [email protected]"
shell: /bin/bash

disable_root: true
Expand Down Expand Up @@ -49,8 +50,46 @@ write_files:
make
make install
permissions: '0755'
- path: /etc/systemd/system/bp-socket-daemon.service
content: |
[Unit]
Description=BP Socket Daemon
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/bp-socket
Environment=LD_LIBRARY_PATH=/usr/local/lib
ExecStart=/bp-socket/daemon/bp_daemon
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
permissions: '0644'
- path: /etc/systemd/system/ion-dtn.service
content: |
[Unit]
Description=ION DTN Stack
After=network.target
Wants=network-online.target

[Service]
Type=oneshot
User=root
WorkingDirectory=/bp-socket/configs
Environment=LD_LIBRARY_PATH=/usr/local/lib
ExecStart=/usr/local/bin/ionstart -I /bp-socket/configs/host.rc
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
permissions: '0644'

runcmd:
- bash /var/run/scripts/provision.sh
- apt-get -y install linux-headers-$(uname -r)
- netplan apply
- netplan apply
- cd /bp-socket && make && insmod /bp-socket/bp_socket/bp.ko
- systemctl daemon-reload
29 changes: 25 additions & 4 deletions configs/cloud-init/ud3tn.cloud-config.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ users:
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users,admin
lock_passwd: false
ssh_authorized_keys:
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCo3kxULSxGtVb70NZ/dI9HUBizF1ooyGT97vf0ORB7ONG4BnNHp4ijuVpBpo9r9LgB8p+M1dhZarrTaQ2u/1lUDrjNGERMt1HfDWmHzbcqr24oGqqOgDcCGrCmcGxqpWcHAu1HfcVfBO4YeJMHYQOkV/0vS3fdhocbGf0vkE13QAfjVmbZvR/dnaaVIdVeoovC2vz6DKCGgfZDM1GB35WzJ5oXoRsHuOReCywea2p5oB90ttM50bnX/Uv7DRn8e3f/8Pwf0Rp/R/JzlLtAeC9HulNyo4LVlWcom4G55D8/g11n03sp7SR2Zl2VorF6Ep6Phuha1izjHj+aCM2TbxSCq7DJnCW7n3GZ4/DqAMP4cglE0IEjGsM6jrDTdbjMlqt6u1RZ+XgUtJktf9g086s/4Rx29V1wtUbqYfjHf3dwYB59Lj3d/mGvuMY0VpcVehYh2CRShPGoFxJ8+FqJSYQsrlu0CeC0QASBx7LUo7PX4N8QLCrmXf2ELzzGoEQl1UWomyufrd/+KcP8hvbWaZZSgoy4ww+3hHCf+RuuLsj4twyhwsFdS4/M0nVQrvTFjsIjeePI9Cwi/yeRph17AIKIjrxgCxHROz1cg3dZD/1fb2m5m6d+SJkuzEAvsP7eypncGOZpO/djhAMD/AfJpJA15uOl/G84G80bZCCFnpK8Rw== [email protected]"
shell: /bin/bash

disable_root: true
Expand Down Expand Up @@ -51,9 +49,32 @@ write_files:
make virtualenv
source .venv/bin/activate
make update-virtualenv
permissions: '0755'
permissions: '0755'
- path: /etc/systemd/system/ud3tn.service
content: |
[Unit]
Description=uD3TN Bundle Protocol Implementation
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/ud3tn
ExecStart=/opt/ud3tn/build/posix/ud3tn \
--allow-remote-config \
--eid ipn:20.0 \
--aap2-socket ./ud3tn.aap2.socket.2 \
--cla "tcpclv3:*,4556" -L 4
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
permissions: '0644'

runcmd:
- bash /var/run/scripts/provision.sh
- chown -R ubuntu:ubuntu /opt/ud3tn
- netplan apply
- netplan apply
- systemctl daemon-reload
- systemctl enable --now ud3tn.service
10 changes: 8 additions & 2 deletions daemon/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ OBJECTS := $(SOURCES:.c=.o)

SRC_FILES := $(wildcard *.c *.h)

.PHONY: all release clean format
.PHONY: all release clean format install

all: $(EXEC)

Expand All @@ -28,4 +28,10 @@ clean:
rm -f $(EXEC) $(OBJECTS)

format:
clang-format -i --style=file $(SRC_FILES)
clang-format -i --style=file $(SRC_FILES)

install: $(EXEC)
@echo "Installing daemon..."
install -d /usr/local/bin
install -m 755 $(EXEC) /usr/local/bin/
@echo "Daemon installed successfully!"
5 changes: 3 additions & 2 deletions daemon/bp_genl.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ int bp_genl_message_handler(struct nl_msg *msg, void *arg) {
err = nla_parse(attrs, BP_GENL_A_MAX, genlmsg_attrdata(genlhdr, 0), genlmsg_attrlen(genlhdr, 0),
NULL);
if (err < 0) {
log_error("Failed to parse Netlink attributes: %s", nl_geterror(err));
log_error("bp_genl_handle_msg: failed to parse Netlink attributes for cmd %d: %s",
genlhdr->cmd, nl_geterror(err));
return NL_SKIP;
}

Expand All @@ -86,7 +87,7 @@ int bp_genl_message_handler(struct nl_msg *msg, void *arg) {
case BP_GENL_CMD_DESTROY_BUNDLE:
return handle_destroy_bundle(daemon, attrs);
default:
log_error("Unknown Generic Netlink command: %d", genlhdr->cmd);
log_error("bp_genl_handle_msg: unknown Generic Netlink command: %d", genlhdr->cmd);
return NL_SKIP;
}
}
Expand Down
20 changes: 9 additions & 11 deletions daemon/bp_genl_handlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ int handle_open_endpoint(Daemon *daemon, struct nlattr **attrs) {
ret = ion_open_endpoint(node_id, service_id, daemon->genl_bp_sock, &daemon->netlink_mutex,
daemon->genl_bp_family_id);
if (ret == 0) {
log_info("[ipn:%u.%u] OPEN_ENDPOINT: endpoint opened successfully", node_id, service_id);
log_info("[ipn:%u.%u] Endpoint opened: spawning receiver and sender threads", node_id,
service_id);
} else {
log_error("[ipn:%u.%u] OPEN_ENDPOINT: failed to open endpoint (error %d)", node_id,
log_error("handle_open_endpoint: failed to open endpoint ipn:%u.%u (error %d)", node_id,
service_id, ret);
}
return ret;
Expand All @@ -51,9 +52,9 @@ int handle_close_endpoint(Daemon *daemon, struct nlattr **attrs) {

int ret = ion_close_endpoint(node_id, service_id);
if (ret == 0) {
log_info("[ipn:%u.%u] CLOSE_ENDPOINT: closing endpoint", node_id, service_id);
log_info("[ipn:%u.%u] Endpoint closed gracefully", node_id, service_id);
} else {
log_error("[ipn:%u.%u] CLOSE_ENDPOINT: failed to close endpoint (error %d)", node_id,
log_error("handle_close_endpoint: failed to close endpoint ipn:%u.%u (error %d)", node_id,
service_id, ret);
}

Expand Down Expand Up @@ -89,22 +90,19 @@ int handle_send_bundle(Daemon *daemon, struct nlattr **attrs) {

written = snprintf(dest_eid, sizeof(dest_eid), "ipn:%u.%u", dest_node_id, dest_service_id);
if (written < 0 || written >= (int)sizeof(dest_eid)) {
log_error("[ipn:%u.%u] handle_send_bundle: failed to construct EID string", src_node_id,
log_error("handle_send_bundle: failed to construct EID string for ipn:%u.%u", src_node_id,
src_service_id);
return -EINVAL;
}

ret = endpoint_registry_enqueue_send(src_node_id, src_service_id, dest_eid, payload,
payload_size, flags);
if (ret < 0) {
log_error("[ipn:%u.%u] handle_send_bundle: failed to enqueue send (error: %d)", src_node_id,
src_service_id, ret);
log_error("handle_send_bundle: failed to enqueue send for ipn:%u.%u (error: %d)",
src_node_id, src_service_id, ret);
return ret;
}

log_info("[ipn:%u.%u] SEND_BUNDLE: bundle queued for sending to EID %s, size %zu (bytes)",
src_node_id, src_service_id, dest_eid, payload_size);

return 0;
}

Expand All @@ -126,7 +124,7 @@ int handle_destroy_bundle(Daemon *daemon, struct nlattr **attrs) {
return ret;
}

log_info("DESTROY_BUNDLE: bundle consumed by a socket (adu: %llu)", (unsigned long long)adu);
log_info("Bundle consumed: successfully destroyed ADU %llu", (unsigned long long)adu);

return 0;
}
12 changes: 4 additions & 8 deletions daemon/daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ int daemon_run(Daemon *self) {
log_error("Failed to create libevent base");
return -ENOMEM;
}
log_info("Using libevent version %s with %s behind the scenes", (char *)event_get_version(),
(char *)event_base_get_method(self->base));
log_debug("Using libevent version %s with %s behind the scenes", (char *)event_get_version(),
(char *)event_base_get_method(self->base));

self->event_on_sigint = evsignal_new(self->base, SIGINT, on_sigint, self->base);
if (!self->event_on_sigint) {
Expand Down Expand Up @@ -79,8 +79,6 @@ int daemon_run(Daemon *self) {
daemon_free(self);
return -ENOMEM;
}
log_info("Generic Netlink: GENL_BP open socket");

fd = nl_socket_get_fd(self->genl_bp_sock);
self->event_on_nl_sock = event_new(self->base, fd, EV_READ | EV_PERSIST, on_netlink, self);
if (!self->event_on_nl_sock) {
Expand Down Expand Up @@ -109,9 +107,8 @@ int daemon_run(Daemon *self) {
return -EAGAIN;
}
sdr = bp_get_sdr();
log_info("Successfully attached to ION");

log_info("Daemon started successfully");
log_info("Daemon started successfully - attached to ION, Netlink ready");
event_base_dispatch(self->base);
log_info("Daemon terminated");

Expand All @@ -124,13 +121,12 @@ int daemon_run(Daemon *self) {
void daemon_free(Daemon *self) {
if (!self) return;

bp_genl_socket_destroy(self);

if (self->event_on_nl_sock) event_free(self->event_on_nl_sock);
if (self->event_on_sigpipe) event_free(self->event_on_sigpipe);
if (self->event_on_sigint) event_free(self->event_on_sigint);
if (self->base) event_base_free(self->base);

bp_genl_socket_destroy(self);
pthread_mutex_destroy(&self->netlink_mutex);

#if LIBEVENT_VERSION_NUMBER >= 0x02010000
Expand Down
7 changes: 4 additions & 3 deletions daemon/endpoint_registry.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,10 @@ int endpoint_registry_enqueue_send(uint32_t node_id, uint32_t service_id, const

pthread_mutex_lock(&ctx->send_queue_mutex);

if (ctx->send_queue_size >= 1000) { // Limite de queue
if (ctx->send_queue_size >= 5000) {
pthread_mutex_unlock(&ctx->send_queue_mutex);
log_warn("endpoint_registry_enqueue_send: queue full for ipn:%u.%u", node_id, service_id);
log_warn("endpoint_registry_enqueue_send: queue full for ipn:%u.%u (size: %d)", node_id,
service_id, ctx->send_queue_size);
free(item->dest_eid);
free(item->payload);
free(item);
Expand All @@ -172,4 +173,4 @@ int endpoint_registry_enqueue_send(uint32_t node_id, uint32_t service_id, const
pthread_mutex_unlock(&ctx->send_queue_mutex);

return 0;
}
}
Loading