WIP: HACK: test iphdr pkt down the stack

Change-Id: I10e93d9c4f4b604385ed6cc3f828e24b8d2a60ba
pespin/test-tun
Pau Espin 2023-01-17 20:17:52 +01:00
parent 0f06148896
commit 578a4d5072
3 changed files with 47 additions and 4 deletions

View File

@ -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() */

View File

@ -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;
}

View File

@ -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;