Hi All,
This is my first post, I have a similar problem to the topic "Network is unreachable error for GTP interface".
I followed all instructions, installed all needed dependencies, upgrade my kernel version to 4.9.0-6 as stated in https://osmocom.org/projects/openggsn/wiki/Kernel_GTP
Unfortunately, no GTP T-PDU encapsulation for my packets.
## Tunnel listing is OK root@routeurA:/home/bob/libgtpnl/tools# ./gtp-tunnel list version 1 tei 200/100 ms_addr 172.23.10.163 sgsn_addr 10.11.12.14
## I have upgraded my Kernel version to 4.9.0-6 as stated in https://osmocom.org/projects/openggsn/wiki/Kernel_GTP At the time of writing (2018-04-26) of this wiki, below listed distributions have support of GTP kernels :
Debian Debian 9 "stretch" (kernel 4.9.0-6)
root@routeurA:/home/bob/libgtpnl/tools# uname -r 4.9.0-6-amd64
## GTP module root@routeurA:/home/bob/libgtpnl/tools# lsmod | grep gtp gtp 28672 0 udp_tunnel 16384 1 gtp
## ping remote ms_addr is not ok root@routeurA:/home/bob/libgtpnl/tools# ping 172.23.10.163 PING 172.23.10.163 (172.23.10.163) 56(84) bytes of data. ^C --- 172.23.10.163 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
## remove the route using "gtpa" device root@routeurA:/home/bob/libgtpnl/tools# ip route del 172.23.10.163/32 dev gtpa
## add new route using normal interface root@routeurA:/home/bob/libgtpnl/tools# ip route add 172.23.10.163/32 via 10.11.12.14
## ping is OK root@routeurA:/home/bob/libgtpnl/tools# ping 172.23.10.163 PING 172.23.10.163 (172.23.10.163) 56(84) bytes of data. 64 bytes from 172.23.10.163: icmp_seq=1 ttl=64 time=0.592 ms 64 bytes from 172.23.10.163: icmp_seq=2 ttl=64 time=0.713 ms
## remove again the route root@routeurA:/home/bob/libgtpnl/tools# ip route del 172.23.10.163/32
## switch it to "gtpa" device root@routeurA:/home/bob/libgtpnl/tools# ip route add 172.23.10.163/32 dev gtpa root@routeurA:/home/bob/libgtpnl/tools# ping 172.23.10.163 PING 172.23.10.163 (172.23.10.163) 56(84) bytes of data. ^C
## tcpdump shows ICMP between the 2 ms_addr, no encapsulation at all
Am I missing something somewhere?
FYI, I'm not using openggsn or ergw, I have developped my small userspace GTP-C ready, but I'm stuck at GTP-U side.
Thanks in advance,
Best Regards,
It is working now. Very simple and stupid mistake from my side at network namespace configuration. Sorry for that!
Thanks! Best Regards,
Hi Papa,
On Sat, Aug 08, 2020 at 10:59:24AM +0300, Papa Tana wrote:
It is working now. Very simple and stupid mistake from my side at network namespace configuration.
I'm very happy to hear it's working successfully. Sometimes I start to doubt if there are problems in the codebase, but the fact that you report you got it to work is a relief in that regard :)
Hi,
After successfully making libgtpnl works between 02 Linux Host, now I am in the step of connecting one Linux Host to a real live SGSN this morning.
I don't have any particular issue at GTP-C side:
- the Mobile Station registered on 3G network, requests one activate PDP context to the SGSN - the SGSN sends to my ggsn a create PDP context - my ggsn accepts it, and answers with all the needed information, such as MS_Address, DNS Address 1, DNS address 2, IP of GGSN-C, IP of GGSN-U, TEID Control Plane, TEID user plane, .... everything should be OK. - upon receipt of my creade_pdp_context_response accepted, the SGSN now try to establish a Tunnel with the given TEID towards my GGSN - but I cannot see anything on my GTPU-side in ggsn, apart of several echo-request message from SGSN - Sure, SGSN try to test connectivity to my ggsn GTPU by using echo-request, but no response - I don't know maybe because of no response, or because of SGSN alert me with an error gtpu-sm-cause-update-ggsn-path-failure, the SGSN decide to send a delete request
So I have 02 questions please:
- 1) At GTP-C, I can implement all messages(echo-response, create-response, delete-response) but at GTPU-side, as the port is used by libgtpnl, I cannot implement an echo-response at all ==> So, do libgtpnl is supposed to answer or not to an echo-response received from a SGSN at GTPU-level?
- 2) When I tried a Linux-to-Linux setup, it worked because I specified the ms_addr and sgsn_addr in the 02 Linux Host. But as I cannot configure anything about the tunnel at SGSN-side(done automatically by SGSN), I can only create the tunnel at ggsn-side thanks to my user space program, by passing the TEID and ms_addr input to libgtpnl. Does it mean that libgtpnl only complies with OpenGGSN, ergw, and OpenAirInterface but not intended to ber used with a real SGSN?
Thanks for clarifying me, Best Regards,
Le lun. 10 août 2020 à 23:00, Harald Welte laforge@osmocom.org a écrit :
Hi Papa,
On Sat, Aug 08, 2020 at 10:59:24AM +0300, Papa Tana wrote:
It is working now. Very simple and stupid mistake from my side at network namespace
configuration.
I'm very happy to hear it's working successfully. Sometimes I start to doubt if there are problems in the codebase, but the fact that you report you got it to work is a relief in that regard :) --
- Harald Welte laforge@osmocom.org
============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6)
Well, After debugging, it is more likely to have some bug in my code because finally, it works after several scenario, but for some reason I don't understand so far, after a moment, the SGSN requests to delete the pdp context.
So, I was connected with a real sim card for around 1 minute, great!
But I still need a clarification about what to do about echo-response at GTP-U because I can only handle echo-response at GTP-C because my ggsn listen in 2123, but I cannot add any message at all like echo-response in 2152 because libgtpnl manage it.
Best Regards,
Le jeu. 20 août 2020 à 12:49, Papa Tana papa.tana101@gmail.com a écrit :
Hi,
After successfully making libgtpnl works between 02 Linux Host, now I am in the step of connecting one Linux Host to a real live SGSN this morning.
I don't have any particular issue at GTP-C side:
- the Mobile Station registered on 3G network, requests one activate PDP
context to the SGSN
- the SGSN sends to my ggsn a create PDP context
- my ggsn accepts it, and answers with all the needed information, such
as MS_Address, DNS Address 1, DNS address 2, IP of GGSN-C, IP of GGSN-U, TEID Control Plane, TEID user plane, .... everything should be OK.
- upon receipt of my creade_pdp_context_response accepted, the SGSN now
try to establish a Tunnel with the given TEID towards my GGSN
- but I cannot see anything on my GTPU-side in ggsn, apart of several
echo-request message from SGSN
- Sure, SGSN try to test connectivity to my ggsn GTPU by using
echo-request, but no response
- I don't know maybe because of no response, or because of SGSN alert me
with an error gtpu-sm-cause-update-ggsn-path-failure, the SGSN decide to send a delete request
So I have 02 questions please:
- At GTP-C, I can implement all messages(echo-response,
create-response, delete-response) but at GTPU-side, as the port is used by libgtpnl, I cannot implement an echo-response at all ==> So, do libgtpnl is supposed to answer or not to an echo-response received from a SGSN at GTPU-level?
- When I tried a Linux-to-Linux setup, it worked because I specified
the ms_addr and sgsn_addr in the 02 Linux Host. But as I cannot configure anything about the tunnel at SGSN-side(done automatically by SGSN), I can only create the tunnel at ggsn-side thanks to my user space program, by passing the TEID and ms_addr input to libgtpnl. Does it mean that libgtpnl only complies with OpenGGSN, ergw, and OpenAirInterface but not intended to ber used with a real SGSN?
Thanks for clarifying me, Best Regards,
Le lun. 10 août 2020 à 23:00, Harald Welte laforge@osmocom.org a écrit :
Hi Papa,
On Sat, Aug 08, 2020 at 10:59:24AM +0300, Papa Tana wrote:
It is working now. Very simple and stupid mistake from my side at network namespace
configuration.
I'm very happy to hear it's working successfully. Sometimes I start to doubt if there are problems in the codebase, but the fact that you report you got it to work is a relief in that regard :) --
- Harald Welte laforge@osmocom.org
============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6)
Hi,
On Thu, Aug 20, 2020 at 07:05:58PM +0300, Papa Tana wrote:
listen in 2123, but I cannot add any message at all like echo-response in 2152 because libgtpnl manage it.
libgtpnl does not manage your UDP socket at all. It manages a netlink socket to the kernel, which is used to create + delete objects in kernel space.
You manage all your UDP sockets. I'm not sure where this misconception is coming from.
It would be great if you could share your GGSN code base with the community, like we share the kernel GTP-U and all of Osmocom with you.
As can be seen in gtp1u_udp_encap_recv(), ther eare multiple situations where GTP-U packets are passed to the socket and not handled in the kernel: * any GTP-U version != 1 * any GTP message types != GTP_TPDU * any GTP messages for which the kernel doesn't know the TID * any GTP messages whose inner IPv4 destination address doesn't match the TID
All of those messsages must be implemented in your userspace program, using the very socket your application has created.
Regards, Harald
On Thu, Aug 20, 2020 at 12:49:20PM +0300, Papa Tana wrote:
- upon receipt of my creade_pdp_context_response accepted, the SGSN now
try to establish a Tunnel with the given TEID towards my GGSN
- but I cannot see anything on my GTPU-side in ggsn, apart of several
echo-request message from SGSN
- Sure, SGSN try to test connectivity to my ggsn GTPU by using
echo-request, but no response
- I don't know maybe because of no response, or because of SGSN alert me
with an error gtpu-sm-cause-update-ggsn-path-failure, the SGSN decide to send a delete request
it is very likely your lack of sending any GTP echo responses.
- At GTP-C, I can implement all messages(echo-response,
create-response, delete-response) but at GTPU-side, as the port is used by libgtpnl, I cannot implement an echo-response at all
Why would you make such an assumption? The UDP socket for GTPU is opened by your application in userspace. You own it. The fact that you passed into libgtpnl as an argument to gtp_dev_create() doesn't mean you shouldn't use that socket. To the contrary, your application is responsible for receiving and responding to any GTP-U packets there.
==> So, do libgtpnl is supposed to answer or not to an echo-response received from a SGSN at GTPU-level?
libgtpnl is (as the 'nl' in the name applies) a library to help you use the netlink interface to configure the GTP-U infrastructure in the kernel. It doesn't ever implement or touch any GTP-U itself.
- When I tried a Linux-to-Linux setup, it worked because I specified
the ms_addr and sgsn_addr in the 02 Linux Host. But as I cannot configure anything about the tunnel at SGSN-side(done automatically by SGSN), I can only create the tunnel at ggsn-side thanks to my user space program, by passing the TEID and ms_addr input to libgtpnl. Does it mean that libgtpnl only complies with OpenGGSN, ergw, and OpenAirInterface but not intended to ber used with a real SGSN?
I don't really understand what you are trying to say here. OsmoSGSN is a "real" SGSN and it speaks excatly the same 3GPP protocols like other SGSNs. The kernel GTP-U plane doesn't care about what your SGSN is, or what your GGSN is.
Hi,
It would be great if you could share your GGSN code base with the
community,
like we share the kernel GTP-U and all of Osmocom with you.
Sure, as for now, I' am still in the early stage, and the code is pretty dirty as I just wanted to make it work first. I'm not really a true programmer, but I was amazed by OSMOGGSN years ago, and I wanted to understand how it is working, so I learned Erlang by June 2020, and this is my first real project. It's a draft yet.
it is very likely your lack of sending any GTP echo responses.
Yes, this is what I was saying. Look, for GTP-C, I am listening in Port 2123. it's free for my userspace program. But for GTP-U, I was trying to listen in port 2152 several times, and it yields an error that I cannot listen on it, port 2152 is already used.
You manage all your UDP sockets. your application is responsible for receiving and responding to any GTP-U
packets there. As I said, I am using Erlang as a userspace program. And when I create a tunnel, I "just" send a basic command exec to the Linux by open_port like this:
Gtp_Tunnel_add = "gtp-tunnel add gtp1 v1 " ++ integer_to_list(Tei_u_peer) ++ " "++ integer_to_list(Tei_u_local) ++" " ++ Pdp_ms_address ++ " " ++ Sgsn_addr, ==> it gives me a string something like "gtp-tunnel add gt1 v1 123456 654321 192.168.1.82 172.23.0.1" then, I execute it io:fwrite("~p~n", [osexec:cmd(Gtp_Tunnel_add)])
The same when deleting the tunnel. So I don't have any idea on how to listen to 2152 as my Erlang program is forbidden to listen on it when libgtpnl is invoked.
I don't really understand what you are trying to say here. OsmoSGSN is a "real" SGSN and it speaks exactly the same 3GPP protocols like other
SGSNs.
The kernel GTP-U plane doesn't care about what your SGSN is, or what your
GGSN is. Allow me to give a short explanation. Between 2 lInux, I create some pair like this: Linux A: gtp-tunnel add gtpa v1 200 100 172.99.0.2 172.0.0.2 Linux B: gtp-tunnel add gtpb v1 100 200 172.99.0.1 172.0.0.1 Now, when Linux A ping 172.99.0.1, packet is encapsulated with sgsn_addr_src = 172.0.0.1 and sgsn_addr_dest = 172.0.0.2
But with my linux ggsn and a real SGSN: Linux A ggsn: gtp-tunnel add gtpa v1 200 100 172.99.0.2 172.0.0.2 Real SGSN: Is the SGSN doing something like this? gtp-tunnel add gtpb v1 100 200 **172.99.0.1**** 172.0.0.1 <<< this part, I was wondering. Because when the MS wants to send traffic, e.g browse to youtube, the packet from MS has the IP of youtube as destination. So, I assume it needs to match to the "ms_addr" parameter in some kind of gtp-tunnel parameter at SGSN side. I know SGSN is not using libgtpnl, but I want to make sure that is it okay if I just create the gtp-tunnel on ggsn side, and I don't care about what SGSN is doing. like this: "gtp-tunnel add gtpa v1 200 100 ms_addr sgsn_addr" And with this, is my tunnel UP? Because as I said, the SGSN is saying he detects that the path on GGSN was down.
Best Regards,
Le ven. 21 août 2020 à 02:00, Harald Welte laforge@gnumonks.org a écrit :
On Thu, Aug 20, 2020 at 12:49:20PM +0300, Papa Tana wrote:
- upon receipt of my creade_pdp_context_response accepted, the SGSN now
try to establish a Tunnel with the given TEID towards my GGSN
- but I cannot see anything on my GTPU-side in ggsn, apart of several
echo-request message from SGSN
- Sure, SGSN try to test connectivity to my ggsn GTPU by using
echo-request, but no response
- I don't know maybe because of no response, or because of SGSN alert me
with an error gtpu-sm-cause-update-ggsn-path-failure, the SGSN decide to send a delete request
it is very likely your lack of sending any GTP echo responses.
- At GTP-C, I can implement all messages(echo-response,
create-response, delete-response) but at GTPU-side, as the port is used
by
libgtpnl, I cannot implement an echo-response at all
Why would you make such an assumption? The UDP socket for GTPU is opened by your application in userspace. You own it. The fact that you passed into libgtpnl as an argument to gtp_dev_create() doesn't mean you shouldn't use that socket. To the contrary, your application is responsible for receiving and responding to any GTP-U packets there.
==> So, do libgtpnl is supposed to answer or not to an echo-response received from a SGSN at GTPU-level?
libgtpnl is (as the 'nl' in the name applies) a library to help you use the netlink interface to configure the GTP-U infrastructure in the kernel. It doesn't ever implement or touch any GTP-U itself.
- When I tried a Linux-to-Linux setup, it worked because I specified
the ms_addr and sgsn_addr in the 02 Linux Host. But as I cannot configure anything about the tunnel at SGSN-side(done automatically by SGSN), I can only create the tunnel at ggsn-side thanks
to
my user space program, by passing the TEID and ms_addr input to libgtpnl. Does it mean that libgtpnl only complies with OpenGGSN, ergw, and OpenAirInterface but not intended to ber used with a real SGSN?
I don't really understand what you are trying to say here. OsmoSGSN is a "real" SGSN and it speaks excatly the same 3GPP protocols like other SGSNs. The kernel GTP-U plane doesn't care about what your SGSN is, or what your GGSN is.
--
- Harald Welte laforge@gnumonks.org
============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6)
On Fri, Aug 21, 2020 at 09:53:34AM +0300, Papa Tana wrote:
But for GTP-U, I was trying to listen in port 2152 several times, and it yields an error that I cannot listen on it, port 2152 is already used.
You cannot do that, sorry.
You manage all your UDP sockets. your application is responsible for receiving and responding to any GTP-U
packets there. As I said, I am using Erlang as a userspace program. And when I create a tunnel, I "just" send a basic command exec to the Linux by open_port like this:
This will obviously not work. You need to manage the socket from your program.
IF it's erlang, you either have to speak netlink directly from within Erlang, or you need to add some native functions for calling libgtpnl.
So I don't have any idea on how to listen to 2152 as my Erlang program is forbidden to listen on it when libgtpnl is invoked.
You are asking for the impossible. You need to open the socket from within your program. You cannot crate a second socket for what you are trying to do.
At least earlier versions of ergw had support for the kernel GTP-U plane, why not simply use that code?
They created https://github.com/travelping/gen_netlink to talk netlink from erlang, including gtpnl support.
At least earlier versions of ergw had support for the kernel GTP-U plane,
why > not simply use that code? My experience with erlang is very limited so far, that's why I was attracted with libgtpnl, because I was able to create a GTP tunnel by invoking only 2 lines # ./gtp-link add # ./gtp-tunnel add
They created https://github.com/travelping/gen_netlink to talk netlink
from > erlang, including gtpnl support. Yes, I saw it. but even trying to build it from tetrapak, I have made some search but I'm struggling: # tetrapak build check (don't even know what is tetrapak :-) )
The creators of these libraries already answer some questions from me in the public erlang mailing list, but about general erlang related questions. I didn't find any public mailing list to these libraries, so I gave up.
You cannot do that, sorry. This will obviously not work. You need to manage the socket from your program. You are asking for the impossible.
I totally agree with you but I've got some idea this afternoon as a workaround. I think I can forward the echo-request that I received on my network interface (owned by gtpnl at GTP-U) to my Erlang program by using some Linux helper like # tcpdump # replay the traffic by tcpreplay to another interface owned by my Erlang program # or I can Write them to a Linux named pipe fifo, and get it from Erlang
By this way, I would be able to craft an echo-response for GTP-U I think.
Those steps are not related to libgtpnl anymore, so would be off-topic.
But Clarifications regarding libgtpnl is very clear for me now.
Thank you,
P.S: I will update here if this echo-response at GTP-U side from my erlang works for me. Have a nice day.
Le ven. 21 août 2020 à 15:40, Harald Welte laforge@gnumonks.org a écrit :
On Fri, Aug 21, 2020 at 09:53:34AM +0300, Papa Tana wrote:
But for GTP-U, I was trying to listen in port 2152 several times, and it yields an error that I cannot listen on it, port 2152 is already used.
You cannot do that, sorry.
You manage all your UDP sockets. your application is responsible for receiving and responding to any
GTP-U
packets there. As I said, I am using Erlang as a userspace program. And when I create a tunnel, I "just" send a basic command exec to the
Linux
by open_port like this:
This will obviously not work. You need to manage the socket from your program.
IF it's erlang, you either have to speak netlink directly from within Erlang, or you need to add some native functions for calling libgtpnl.
So I don't have any idea on how to listen to 2152 as my Erlang program is forbidden to listen on it when libgtpnl is invoked.
You are asking for the impossible. You need to open the socket from within your program. You cannot crate a second socket for what you are trying to do.
At least earlier versions of ergw had support for the kernel GTP-U plane, why not simply use that code?
They created https://github.com/travelping/gen_netlink to talk netlink from erlang, including gtpnl support.
--
- Harald Welte laforge@gnumonks.org
============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6)
As can be seen in gtp1u_udp_encap_recv(), there are multiple situations
where
GTP-U packets are passed to the socket and not handled in the kernel:
- any GTP-U version != 1
- any GTP message types != GTP_TPDU
- any GTP messages for which the kernel doesn't know the TID
- any GTP messages whose inner IPv4 destination address doesn't match the
TID
Humm, this answer seems very interesting for me. While trying to make my ggsn work using some Linux helper as I said previously, on the other hand, I want to try netlink now after your very clear explanation.
I found that tetrapak is just a building tool, so I can use gen_netlink because I understand the concept now.
I will ask them on the mailing list, but "in a more general way" (not erlang only point of view), I have read on wikipedia and it's similar to Unix Socket, this I am familiar with, I can manage them in userspace. I understood that netlink is a bit similar, not using filename but PID instead (IPC: Inter Process Communication), and *sounds even more great because thanks to netlink, I would be able to discuss to the kernel level from user space!!!!* Even though the source code of libgtpnl is open, I have 0 knowledge in C, I just know the printf() function.
*So if anyone can give a hint on the Concept by managing the GTP linux module using netlink, just the Concept, not how to do it by code, would be really appreciated.*
Best Regards,
Le ven. 21 août 2020 à 16:57, Papa Tana papa.tana101@gmail.com a écrit :
At least earlier versions of ergw had support for the kernel GTP-U
plane, why > not simply use that code? My experience with erlang is very limited so far, that's why I was attracted with libgtpnl, because I was able to create a GTP tunnel by invoking only 2 lines # ./gtp-link add # ./gtp-tunnel add
They created https://github.com/travelping/gen_netlink to talk netlink
from > erlang, including gtpnl support. Yes, I saw it. but even trying to build it from tetrapak, I have made some search but I'm struggling: # tetrapak build check (don't even know what is tetrapak :-) )
The creators of these libraries already answer some questions from me in the public erlang mailing list, but about general erlang related questions. I didn't find any public mailing list to these libraries, so I gave up.
You cannot do that, sorry. This will obviously not work. You need to manage the socket from your program. You are asking for the impossible.
I totally agree with you but I've got some idea this afternoon as a workaround. I think I can forward the echo-request that I received on my network interface (owned by gtpnl at GTP-U) to my Erlang program by using some Linux helper like # tcpdump # replay the traffic by tcpreplay to another interface owned by my Erlang program # or I can Write them to a Linux named pipe fifo, and get it from Erlang
By this way, I would be able to craft an echo-response for GTP-U I think.
Those steps are not related to libgtpnl anymore, so would be off-topic.
But Clarifications regarding libgtpnl is very clear for me now.
Thank you,
P.S: I will update here if this echo-response at GTP-U side from my erlang works for me. Have a nice day.
Le ven. 21 août 2020 à 15:40, Harald Welte laforge@gnumonks.org a écrit :
On Fri, Aug 21, 2020 at 09:53:34AM +0300, Papa Tana wrote:
But for GTP-U, I was trying to listen in port 2152 several times, and it yields an error that I cannot listen on it, port 2152 is already used.
You cannot do that, sorry.
You manage all your UDP sockets. your application is responsible for receiving and responding to any
GTP-U
packets there. As I said, I am using Erlang as a userspace program. And when I create a tunnel, I "just" send a basic command exec to the
Linux
by open_port like this:
This will obviously not work. You need to manage the socket from your program.
IF it's erlang, you either have to speak netlink directly from within Erlang, or you need to add some native functions for calling libgtpnl.
So I don't have any idea on how to listen to 2152 as my Erlang program
is
forbidden to listen on it when libgtpnl is invoked.
You are asking for the impossible. You need to open the socket from within your program. You cannot crate a second socket for what you are trying to do.
At least earlier versions of ergw had support for the kernel GTP-U plane, why not simply use that code?
They created https://github.com/travelping/gen_netlink to talk netlink from erlang, including gtpnl support.
--
- Harald Welte laforge@gnumonks.org
============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6)
Hi,
An update as promised, I tried my workaround:
- sniff from userspace the echo-request sent by peer SGSN to libgtpnl: OK - craft a message (echo-response) and send it to SGSN: OK from another port, but NOK from 2152 Whatever I tried (bind to low level socket, Linux helper, etc...), it was impossible because the SGSN only accepts the message that he recognize that he has sent, and wait for the exact pair {ip, port} so, it was impossible for me since it was owned by libgtpnl when I invoke "gtp-link add".
The previous suggestion is really interesting to me: * - speak netlink directly to the GTP-U module.*
Yes, there is some library that can speak netlink, but since I want to learn first how to do it without using a library, I have learned how to speak netlink to Linux Module (libnl-genl). I have checked out the message structure(headers, length, type, flags, sequence number, pid, Command, Data, ....). I have monitored some stuff by using "nlmon". And now, I can create a netlink socket as a File Descriptor, craft some Netlink Message manually, flush it to the kernel and receive some response from a sample kernel module.
But my question is, and what I need help with, what data does GTP.ko expect from me when I need to request an add or delete tunnel, since I cannot see any documentation about Linux GTP module interface. I'm not requesting a code, but only the message or binary I need to transport in my netlink socket towards GTP-U Linux module.
Thanks for any help or hint, Best Regards,
osmocom-net-gprs@lists.osmocom.org