tools: gtp-link: bind to GTP UDP sockets
So we can fully test packet decapsulation without a full blown openggsn setup by injecting packets and using this simple tool. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
7b30c5526a
commit
50826a5667
|
@ -27,6 +27,8 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include <libmnl/libmnl.h>
|
#include <libmnl/libmnl.h>
|
||||||
#include <linux/if.h>
|
#include <linux/if.h>
|
||||||
|
@ -72,6 +74,31 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
int fd1 = socket(AF_INET, SOCK_DGRAM, 0);
|
int fd1 = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
int fd2 = socket(AF_INET, SOCK_DGRAM, 0);
|
int fd2 = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
struct sockaddr_in sockaddr_fd1 = {
|
||||||
|
.sin_family = AF_INET,
|
||||||
|
.sin_port = htons(3386),
|
||||||
|
.sin_addr = {
|
||||||
|
.s_addr = INADDR_ANY,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
struct sockaddr_in sockaddr_fd2 = {
|
||||||
|
.sin_family = AF_INET,
|
||||||
|
.sin_port = htons(2152),
|
||||||
|
.sin_addr = {
|
||||||
|
.s_addr = INADDR_ANY,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (bind(fd1, (struct sockaddr *) &sockaddr_fd1,
|
||||||
|
sizeof(sockaddr_fd1)) < 0) {
|
||||||
|
perror("bind");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (bind(fd2, (struct sockaddr *) &sockaddr_fd2,
|
||||||
|
sizeof(sockaddr_fd2)) < 0) {
|
||||||
|
perror("bind");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
mnl_attr_put_str(nlh, IFLA_IFNAME, argv[2]);
|
mnl_attr_put_str(nlh, IFLA_IFNAME, argv[2]);
|
||||||
nest = mnl_attr_nest_start(nlh, IFLA_LINKINFO);
|
nest = mnl_attr_nest_start(nlh, IFLA_LINKINFO);
|
||||||
|
@ -119,7 +146,15 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
fprintf(stderr, "WARNING: attaching dummy socket descriptors. Keep "
|
fprintf(stderr, "WARNING: attaching dummy socket descriptors. Keep "
|
||||||
"this process running for testing purposes.\n");
|
"this process running for testing purposes.\n");
|
||||||
pause();
|
|
||||||
|
while (1) {
|
||||||
|
struct sockaddr_in addr;
|
||||||
|
socklen_t len = sizeof(addr);
|
||||||
|
|
||||||
|
ret = recvfrom(fd1, buf, sizeof(buf), 0,
|
||||||
|
(struct sockaddr *)&addr, &len);
|
||||||
|
printf("received %d bytes via UDP socket\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue