Is there a file that associates a thread to its network namespace?












4















/proc/[pid]/ns/net contains a link to the inode representing the network namespace of the process with PID [pid]. Is there something similar for threads?



My use case is a multi-threaded application, where there's one main thread and a group of worker threads. The generic worker W creates a new network namespace N with a call to unshare() (which makes W enter N), pushes one end of a veth pair in N and leaves it (it uses an fd pointing to the root namespace to go back to such namespace). Since no processes are in N after W goes back to the root namespace, N is destroyed when that happens, and I do not want that.



The solution I thought about is to mount a link to N somewhere in the filesystem. This is what iproute2 netns does: mounting a link to /proc/[pid]/ns/net. The problem, in my case, is that /proc/[pid]/ns/net keeps referencing the root namespace, only W changes namespace, hence I cannot use it and I need a file/something else which points to the namespace of a thread. Is there such a thing in Linux?










share|improve this question







New contributor




Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    4















    /proc/[pid]/ns/net contains a link to the inode representing the network namespace of the process with PID [pid]. Is there something similar for threads?



    My use case is a multi-threaded application, where there's one main thread and a group of worker threads. The generic worker W creates a new network namespace N with a call to unshare() (which makes W enter N), pushes one end of a veth pair in N and leaves it (it uses an fd pointing to the root namespace to go back to such namespace). Since no processes are in N after W goes back to the root namespace, N is destroyed when that happens, and I do not want that.



    The solution I thought about is to mount a link to N somewhere in the filesystem. This is what iproute2 netns does: mounting a link to /proc/[pid]/ns/net. The problem, in my case, is that /proc/[pid]/ns/net keeps referencing the root namespace, only W changes namespace, hence I cannot use it and I need a file/something else which points to the namespace of a thread. Is there such a thing in Linux?










    share|improve this question







    New contributor




    Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      4












      4








      4


      1






      /proc/[pid]/ns/net contains a link to the inode representing the network namespace of the process with PID [pid]. Is there something similar for threads?



      My use case is a multi-threaded application, where there's one main thread and a group of worker threads. The generic worker W creates a new network namespace N with a call to unshare() (which makes W enter N), pushes one end of a veth pair in N and leaves it (it uses an fd pointing to the root namespace to go back to such namespace). Since no processes are in N after W goes back to the root namespace, N is destroyed when that happens, and I do not want that.



      The solution I thought about is to mount a link to N somewhere in the filesystem. This is what iproute2 netns does: mounting a link to /proc/[pid]/ns/net. The problem, in my case, is that /proc/[pid]/ns/net keeps referencing the root namespace, only W changes namespace, hence I cannot use it and I need a file/something else which points to the namespace of a thread. Is there such a thing in Linux?










      share|improve this question







      New contributor




      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      /proc/[pid]/ns/net contains a link to the inode representing the network namespace of the process with PID [pid]. Is there something similar for threads?



      My use case is a multi-threaded application, where there's one main thread and a group of worker threads. The generic worker W creates a new network namespace N with a call to unshare() (which makes W enter N), pushes one end of a veth pair in N and leaves it (it uses an fd pointing to the root namespace to go back to such namespace). Since no processes are in N after W goes back to the root namespace, N is destroyed when that happens, and I do not want that.



      The solution I thought about is to mount a link to N somewhere in the filesystem. This is what iproute2 netns does: mounting a link to /proc/[pid]/ns/net. The problem, in my case, is that /proc/[pid]/ns/net keeps referencing the root namespace, only W changes namespace, hence I cannot use it and I need a file/something else which points to the namespace of a thread. Is there such a thing in Linux?







      linux networking namespace thread network-namespaces






      share|improve this question







      New contributor




      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked Jan 13 at 3:07









      MatteoMatteo

      313




      313




      New contributor




      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          1 Answer
          1






          active

          oldest

          votes


















          1














          There is a file that associates a thread to its network namespace:



          /proc/[PID]/task/[TID]/ns/net


          where TID is the thread ID. This solved my issue.






          share|improve this answer








          New contributor




          Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.




















            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "106"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });






            Matteo is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494195%2fis-there-a-file-that-associates-a-thread-to-its-network-namespace%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            There is a file that associates a thread to its network namespace:



            /proc/[PID]/task/[TID]/ns/net


            where TID is the thread ID. This solved my issue.






            share|improve this answer








            New contributor




            Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.

























              1














              There is a file that associates a thread to its network namespace:



              /proc/[PID]/task/[TID]/ns/net


              where TID is the thread ID. This solved my issue.






              share|improve this answer








              New contributor




              Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.























                1












                1








                1







                There is a file that associates a thread to its network namespace:



                /proc/[PID]/task/[TID]/ns/net


                where TID is the thread ID. This solved my issue.






                share|improve this answer








                New contributor




                Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.










                There is a file that associates a thread to its network namespace:



                /proc/[PID]/task/[TID]/ns/net


                where TID is the thread ID. This solved my issue.







                share|improve this answer








                New contributor




                Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                share|improve this answer



                share|improve this answer






                New contributor




                Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                answered Jan 15 at 2:52









                MatteoMatteo

                313




                313




                New contributor




                Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.





                New contributor





                Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






                Matteo is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






















                    Matteo is a new contributor. Be nice, and check out our Code of Conduct.










                    draft saved

                    draft discarded


















                    Matteo is a new contributor. Be nice, and check out our Code of Conduct.













                    Matteo is a new contributor. Be nice, and check out our Code of Conduct.












                    Matteo is a new contributor. Be nice, and check out our Code of Conduct.
















                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494195%2fis-there-a-file-that-associates-a-thread-to-its-network-namespace%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

                    is 'sed' thread safe

                    How to make a Squid Proxy server?