@@ -16,7 +16,6 @@ package network
1616
1717import (
1818 "fmt"
19- "os/user"
2019 "strconv"
2120 "strings"
2221
@@ -37,72 +36,27 @@ type DynamicNetwork struct {
3736// for multiple unikernels in the same pod/network namespace
3837// See: https://github.com/nubificus/urunc/issues/13
3938func (n DynamicNetwork ) NetworkSetup () (* UnikernelNetworkInfo , error ) {
40- err := ensureEth0Exists ()
41- // if eth0 does not exist in the namespace, the unikernel was spawned using ctr, so we skip the network setup
42- if err != nil {
43- netlog .Info ("eth0 interface not found, assuming unikernel was spawned using ctr" )
44- return nil , nil
45- }
46- redirectLink , err := netlink .LinkByName (DefaultInterface )
47- if err != nil {
48- netlog .Errorf ("failed to find %s interface" , DefaultInterface )
49- return nil , err
50- }
51- ifInfo , err := getInterfaceInfo (DefaultInterface )
52- if err != nil {
53- return nil , err
54- }
55- currentUser , err := user .Current ()
56- if err != nil {
57- return nil , err
58- }
59- uid , err := strconv .Atoi (currentUser .Uid )
60- if err != nil {
61- return nil , err
62- }
63- gid , err := strconv .Atoi (currentUser .Gid )
64- if err != nil {
65- return nil , err
66- }
6739 tapIndex , err := getTapIndex ()
6840 if err != nil {
6941 return nil , err
7042 }
71- newTapName := strings .ReplaceAll (DefaultTap , "X" , strconv .Itoa (tapIndex ))
72- newTapDevice , err := createTapDevice (newTapName , redirectLink .Attrs ().MTU , uid , gid )
43+ redirectLink , err := netlink .LinkByName (DefaultInterface )
7344 if err != nil {
45+ netlog .Errorf ("failed to find %s interface" , DefaultInterface )
7446 return nil , err
7547 }
48+ newTapName := strings .ReplaceAll (DefaultTap , "X" , strconv .Itoa (tapIndex ))
49+ addTCRules := false
7650 if tapIndex == 0 {
77- err = addIngressQdisc (newTapDevice )
78- if err != nil {
79- return nil , err
80- }
81- err = addIngressQdisc (redirectLink )
82- if err != nil {
83- return nil , err
84- }
85- err = addRedirectFilter (newTapDevice , redirectLink )
86- if err != nil {
87- return nil , err
88- }
89- err = addRedirectFilter (redirectLink , newTapDevice )
90- if err != nil {
91- return nil , err
92- }
51+ addTCRules = true
9352 }
9453 ipTemplate := fmt .Sprintf ("%s/24" , constants .DynamicNetworkTapIP )
9554 newIPAddr := strings .ReplaceAll (ipTemplate , "X" , strconv .Itoa (tapIndex + 1 ))
96- ipn , err := netlink .ParseAddr (newIPAddr )
97- if err != nil {
98- return nil , err
99- }
100- err = netlink .AddrReplace (newTapDevice , ipn )
55+ newTapDevice , err := networkSetup (newTapName , newIPAddr , redirectLink , addTCRules )
10156 if err != nil {
10257 return nil , err
10358 }
104-
105- err = netlink .LinkSetUp (newTapDevice )
59+ ifInfo , err := getInterfaceInfo (DefaultInterface )
10660 if err != nil {
10761 return nil , err
10862 }
0 commit comments