WIP: HACK: test iphdr pkt down the stack
Change-Id: I10e93d9c4f4b604385ed6cc3f828e24b8d2a60bapespin/test-tun
parent
0f06148896
commit
578a4d5072
|
@ -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() */
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue