diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-03-15 20:53:08 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-03-24 15:39:17 +0100 |
commit | a7a4df366b0107e0f373a40156451ac97c54a080 (patch) | |
tree | 310c1af2e972dac17ed31719ad774e76dde1edcd /tools/gtp-link.c | |
parent | 6d60a402b25a1885a2c14598bef5588df78fd726 (diff) |
gtl-link.c: Actually use libgtpnl, don't hand-coded netlink msg
The command line tool should use libgtpnl, rather than replicating code
for generating a netlink message.
Diffstat (limited to 'tools/gtp-link.c')
-rw-r--r-- | tools/gtp-link.c | 58 |
1 files changed, 3 insertions, 55 deletions
diff --git a/tools/gtp-link.c b/tools/gtp-link.c index 9c12f75..97dfa45 100644 --- a/tools/gtp-link.c +++ b/tools/gtp-link.c @@ -42,13 +42,8 @@ int main(int argc, char *argv[]) { - struct mnl_socket *nl; char buf[MNL_SOCKET_BUFFER_SIZE]; - struct nlmsghdr *nlh; - struct ifinfomsg *ifm; int ret; - unsigned int seq, portid; - struct nlattr *nest, *nest2; if (argc != 3) { printf("Usage: %s <add|del> <device>\n", argv[0]); @@ -63,15 +58,6 @@ int main(int argc, char *argv[]) return 0; } - nlh = mnl_nlmsg_put_header(buf); - nlh->nlmsg_type = RTM_NEWLINK; - nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL |NLM_F_ACK; - nlh->nlmsg_seq = seq = time(NULL); - ifm = mnl_nlmsg_put_extra_header(nlh, sizeof(*ifm)); - ifm->ifi_family = AF_INET; - ifm->ifi_change |= IFF_UP; - ifm->ifi_flags |= IFF_UP; - int fd1 = socket(AF_INET, SOCK_DGRAM, 0); int fd2 = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in sockaddr_fd1 = { @@ -100,50 +86,12 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - mnl_attr_put_str(nlh, IFLA_IFNAME, argv[2]); - nest = mnl_attr_nest_start(nlh, IFLA_LINKINFO); - mnl_attr_put_str(nlh, IFLA_INFO_KIND, "gtp"); - nest2 = mnl_attr_nest_start(nlh, IFLA_INFO_DATA); - mnl_attr_put_u32(nlh, IFLA_GTP_FD0, fd1); - mnl_attr_put_u32(nlh, IFLA_GTP_FD1, fd2); - mnl_attr_put_u32(nlh, IFLA_GTP_PDP_HASHSIZE, 131072); - mnl_attr_nest_end(nlh, nest2); - mnl_attr_nest_end(nlh, nest); - - nl = mnl_socket_open(NETLINK_ROUTE); - if (nl == NULL) { - perror("mnl_socket_open"); - exit(EXIT_FAILURE); - } - - if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) { - perror("mnl_socket_bind"); - exit(EXIT_FAILURE); - } - portid = mnl_socket_get_portid(nl); - - mnl_nlmsg_fprintf(stdout, nlh, nlh->nlmsg_len, - sizeof(struct ifinfomsg)); - - if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) { - perror("mnl_socket_send"); + ret = gtp_dev_create(-1, argv[2], fd1, fd2); + if (ret < 0) { + perror("cannot create GTP device\n"); exit(EXIT_FAILURE); } - ret = mnl_socket_recvfrom(nl, buf, sizeof(buf)); - if (ret == -1) { - perror("read"); - exit(EXIT_FAILURE); - } - - ret = mnl_cb_run(buf, ret, seq, portid, NULL, NULL); - if (ret == -1){ - perror("callback"); - exit(EXIT_FAILURE); - } - - mnl_socket_close(nl); - fprintf(stderr, "WARNING: attaching dummy socket descriptors. Keep " "this process running for testing purposes.\n"); |