summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-01-17 20:17:52 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2023-03-02 12:47:53 +0100
commit578a4d50724c5ed84c63d5d90869066f553c23f2 (patch)
treeb2e96a628c110d3c79f72316e729756358c7a859
parent0f0614889677473d6531d47e1f192f4f71fc0062 (diff)
WIP: HACK: test iphdr pkt down the stackpespin/test-tun
-rw-r--r--src/host/layer23/src/common/apn.c29
-rw-r--r--src/host/layer23/src/modem/app_modem.c18
-rw-r--r--src/host/layer23/src/modem/vty.c4
3 files changed, 47 insertions, 4 deletions
diff --git a/src/host/layer23/src/common/apn.c b/src/host/layer23/src/common/apn.c
index 169e30e9..93b0ff9b 100644
--- a/src/host/layer23/src/common/apn.c
+++ b/src/host/layer23/src/common/apn.c
@@ -22,6 +22,8 @@
#include <netinet/ip6.h>
#include <talloc.h>
+#include <osmocom/core/socket.h>
+#include <osmocom/core/sockaddr_str.h>
#include <osmocom/bb/common/logging.h>
#include <osmocom/bb/common/apn.h>
@@ -82,6 +84,33 @@ int apn_start(struct osmobb_apn *apn)
LOGPAPN(LOGL_INFO, apn, "Opened TUN device %s\n", osmo_tundev_get_dev_name(apn->tun));
+ struct osmo_netdev *netdev = osmo_tundev_get_netdev(apn->tun);
+ struct osmo_sockaddr_str osa_str = {};
+ struct osmo_sockaddr osa = {};
+ rc = osmo_sockaddr_str_from_str2(&osa_str, "192.168.200.1");
+ if (rc < 0)
+ return -1;
+ rc = osmo_sockaddr_str_to_sockaddr(&osa_str, &osa.u.sas);
+ if (rc < 0)
+ return -1;
+ rc = osmo_netdev_add_addr(netdev, &osa, 24);
+ if (rc < 0)
+ return -1;
+
+ rc = osmo_netdev_ifupdown(netdev, true);
+ if (rc < 0)
+ return -1;
+
+ /* Add default route (0.0.0.0/0): */
+ rc = osmo_sockaddr_str_from_str2(&osa_str, "0.0.0.0");
+ if (rc < 0)
+ return -1;
+ rc = osmo_sockaddr_str_to_sockaddr(&osa_str, &osa.u.sas);
+ if (rc < 0)
+ return -1;
+ rc = osmo_netdev_add_route(netdev, &osa, 0, NULL);
+ if (rc < 0)
+ return -1;
/* TODO: set IP addresses on the tun device once we receive them from GGSN. See
osmo-ggsn.git's apn_start() */
diff --git a/src/host/layer23/src/modem/app_modem.c b/src/host/layer23/src/modem/app_modem.c
index b55768fc..a5d30787 100644
--- a/src/host/layer23/src/modem/app_modem.c
+++ b/src/host/layer23/src/modem/app_modem.c
@@ -352,6 +352,24 @@ static int modem_rx_imm_ass(struct osmocom_ms *ms, struct msgb *msg)
return rc;
rr->state = GSM48_RR_ST_DEDICATED;
+
+ /* TMP HACK: inject some example packet as if it came from tun device: */
+ struct osmobb_apn *apn;
+ apn = llist_first_entry_or_null(&ms->gprs.apn_list, struct osmobb_apn, list);
+ if (!apn) {
+ LOGP(DSNDCP, LOGL_NOTICE, "Unable to find APN\n");
+ return 0;
+ }
+ struct msgb *msg_tmp = msgb_alloc(4096, "MNCC");
+ struct iphdr *iphdr = (struct iphdr *)msgb_put(msg_tmp, sizeof(struct iphdr));
+ *iphdr = (struct iphdr){
+ .ihl = 5,
+ .version = 4,
+ .saddr = 0x11223344,
+ .daddr = 0x55667788,
+ };
+ memset(msgb_put(msg_tmp, 4), 0x2b, 4);
+ modem_tun_data_ind_cb(apn->tun, msg_tmp);
return 0;
}
diff --git a/src/host/layer23/src/modem/vty.c b/src/host/layer23/src/modem/vty.c
index bd8afd8f..a216d074 100644
--- a/src/host/layer23/src/modem/vty.c
+++ b/src/host/layer23/src/modem/vty.c
@@ -164,10 +164,6 @@ DEFUN(cfg_apn_no_shutdown, cfg_apn_no_shutdown_cmd,
struct osmobb_apn *apn = (struct osmobb_apn *) vty->index;
if (apn->cfg.shutdown) {
- if (!apn->cfg.dev_name) {
- vty_out(vty, "%% Failed to start APN, tun-device is not configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
if (apn_start(apn) < 0) {
vty_out(vty, "%% Failed to start APN, check log for details%s", VTY_NEWLINE);
return CMD_WARNING;