diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2023-01-17 20:17:52 +0100 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2023-03-02 12:47:53 +0100 |
commit | 578a4d50724c5ed84c63d5d90869066f553c23f2 (patch) | |
tree | b2e96a628c110d3c79f72316e729756358c7a859 | |
parent | 0f0614889677473d6531d47e1f192f4f71fc0062 (diff) |
WIP: HACK: test iphdr pkt down the stackpespin/test-tun
Change-Id: I10e93d9c4f4b604385ed6cc3f828e24b8d2a60ba
-rw-r--r-- | src/host/layer23/src/common/apn.c | 29 | ||||
-rw-r--r-- | src/host/layer23/src/modem/app_modem.c | 18 | ||||
-rw-r--r-- | src/host/layer23/src/modem/vty.c | 4 |
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; |