Skip to content

Commit

Permalink
update to prepare for IPv6 support
Browse files Browse the repository at this point in the history
  • Loading branch information
ummakynes authored and laf0rge committed Apr 4, 2023
1 parent b8503c6 commit e0867c8
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 17 deletions.
26 changes: 15 additions & 11 deletions src/gtp-genl.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ static void gtp_build_payload(struct nlmsghdr *nlh, struct gtp_tunnel *t)
if (t->ifns >= 0)
mnl_attr_put_u32(nlh, GTPA_NET_NS_FD, t->ifns);
mnl_attr_put_u32(nlh, GTPA_LINK, t->ifidx);
if (t->sgsn_addr.s_addr)
mnl_attr_put_u32(nlh, GTPA_PEER_ADDRESS, t->sgsn_addr.s_addr);
if (t->ms_addr.s_addr)
mnl_attr_put_u32(nlh, GTPA_MS_ADDRESS, t->ms_addr.s_addr);
if (t->ip.sgsn_addr.s_addr)
mnl_attr_put_u32(nlh, GTPA_PEER_ADDRESS, t->ip.sgsn_addr.s_addr);
if (t->ip.ms_addr.s_addr)
mnl_attr_put_u32(nlh, GTPA_MS_ADDRESS, t->ip.ms_addr.s_addr);
if (t->gtp_version == GTP_V0) {
mnl_attr_put_u64(nlh, GTPA_TID, t->u.v0.tid);
mnl_attr_put_u16(nlh, GTPA_FLOW, t->u.v0.flowid);
Expand Down Expand Up @@ -116,8 +116,12 @@ struct gtp_pdp {
uint32_t o_tei;
} v1;
} u;
struct in_addr sgsn_addr;
struct in_addr ms_addr;
union {
struct {
struct in_addr sgsn_addr;
struct in_addr ms_addr;
} ip;
};
};

static int genl_gtp_validate_cb(const struct nlattr *attr, void *data)
Expand Down Expand Up @@ -167,27 +171,27 @@ static int genl_gtp_attr_cb(const struct nlmsghdr *nlh, void *data)
if (tb[GTPA_O_TEI])
pdp.u.v1.o_tei = mnl_attr_get_u32(tb[GTPA_O_TEI]);
if (tb[GTPA_PEER_ADDRESS]) {
pdp.sgsn_addr.s_addr =
pdp.ip.sgsn_addr.s_addr =
mnl_attr_get_u32(tb[GTPA_PEER_ADDRESS]);
}
if (tb[GTPA_MS_ADDRESS]) {
pdp.ms_addr.s_addr = mnl_attr_get_u32(tb[GTPA_MS_ADDRESS]);
pdp.ip.ms_addr.s_addr = mnl_attr_get_u32(tb[GTPA_MS_ADDRESS]);
}
if (tb[GTPA_VERSION]) {
pdp.version = mnl_attr_get_u32(tb[GTPA_VERSION]);
}

printf("version %u ", pdp.version);
if (pdp.version == GTP_V0) {
inet_ntop(AF_INET, &pdp.ms_addr, buf, sizeof(buf));
inet_ntop(AF_INET, &pdp.ip.ms_addr, buf, sizeof(buf));
printf("tid %"PRIu64" ms_addr %s ",
pdp.u.v0.tid, buf);
} else if (pdp.version == GTP_V1) {
inet_ntop(AF_INET, &pdp.ms_addr, buf, sizeof(buf));
inet_ntop(AF_INET, &pdp.ip.ms_addr, buf, sizeof(buf));
printf("tei %u/%u ms_addr %s ", pdp.u.v1.i_tei,
pdp.u.v1.o_tei, buf);
}
inet_ntop(AF_INET, &pdp.sgsn_addr, buf, sizeof(buf));
inet_ntop(AF_INET, &pdp.ip.sgsn_addr, buf, sizeof(buf));
printf("sgsn_addr %s\n", buf);

return MNL_CB_OK;
Expand Down
8 changes: 4 additions & 4 deletions src/gtp.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ EXPORT_SYMBOL(gtp_tunnel_set_ifidx);

void gtp_tunnel_set_ms_ip4(struct gtp_tunnel *t, struct in_addr *ms_addr)
{
t->ms_addr = *ms_addr;
t->ip.ms_addr = *ms_addr;
}
EXPORT_SYMBOL(gtp_tunnel_set_ms_ip4);

void gtp_tunnel_set_sgsn_ip4(struct gtp_tunnel *t, struct in_addr *sgsn_addr)
{
t->sgsn_addr = *sgsn_addr;
t->ip.sgsn_addr = *sgsn_addr;
}
EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip4);

Expand Down Expand Up @@ -114,13 +114,13 @@ EXPORT_SYMBOL(gtp_tunnel_get_ifidx);

const struct in_addr *gtp_tunnel_get_ms_ip4(struct gtp_tunnel *t)
{
return &t->ms_addr;
return &t->ip.ms_addr;
}
EXPORT_SYMBOL(gtp_tunnel_get_ms_ip4);

const struct in_addr *gtp_tunnel_get_sgsn_ip4(struct gtp_tunnel *t)
{
return &t->sgsn_addr;
return &t->ip.sgsn_addr;
}
EXPORT_SYMBOL(gtp_tunnel_get_sgsn_ip4);

Expand Down
8 changes: 6 additions & 2 deletions src/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@
struct gtp_tunnel {
int ifns;
uint32_t ifidx;
struct in_addr ms_addr;
struct in_addr sgsn_addr;
union {
struct {
struct in_addr ms_addr;
struct in_addr sgsn_addr;
} ip;
};
int gtp_version;
union {
struct {
Expand Down

0 comments on commit e0867c8

Please sign in to comment.