@@ -83,36 +83,54 @@ listen_port=%d
8383 // configure system networking
8484
8585 if ! s .NoNetConfigure {
86- // configure self
87- selfSvc := make (map [state.ServiceId ]struct {})
88-
89- for _ , svc := range s .GetRouter (s .Id ).Services {
90- prefix := s .GetSvcPrefix (svc )
91- selfSvc [svc ] = struct {}{}
92- err = ConfigureAlias (itfName , prefix )
86+ // run pre-up commands
87+ for _ , cmd := range s .PreUp {
88+ err = ExecSplit (s .Log , cmd )
9389 if err != nil {
94- return err
90+ s . Log . Error ( "failed to run pre-up command" , " err" , err )
9591 }
9692 }
9793
98- if len (s .GetRouter (s .Id ).Services ) == 0 {
99- return fmt .Errorf ("no address configured for self" )
94+ for _ , addr := range s .GetRouter (s .Id ).Addresses {
95+ err := ConfigureAlias (s .Log , itfName , addr )
96+ if err != nil {
97+ s .Log .Error ("failed to configure alias" , "err" , err )
98+ }
10099 }
101100
102- err = InitInterface (itfName )
101+ err = InitInterface (s . Log , itfName )
103102
104103 if err != nil {
105104 return err
106105 }
107106
108- // configure services
109- for svc , prefix := range s .Services {
110- if _ , ok := selfSvc [svc ]; ok {
111- continue
107+ // configure prefixes
108+ include := append (s .GetPrefixes (), s .IncludeIPs ... )
109+ if len (s .IncludeIPs ) != 0 {
110+ include = s .IncludeIPs
111+ }
112+ for _ , inc := range include {
113+ s .Log .Debug ("Include Prefix" , "prefix" , inc .String ())
114+ }
115+ for _ , excl := range s .ExcludeIPs {
116+ s .Log .Debug ("Exclude Prefix" , "prefix" , excl .String ())
117+ }
118+ computed := state .ComputeSplitTunnel (include , s .ExcludeIPs )
119+ for _ , pre := range computed {
120+ s .Log .Debug ("Computed Prefix" , "prefix" , pre .String ())
121+ }
122+ for _ , prefix := range computed {
123+ err := ConfigureRoute (s .Log , n .Tun , itfName , prefix )
124+ if err != nil {
125+ s .Log .Error ("failed to configure route" , "err" , err )
112126 }
113- err = ConfigureRoute (n .Tun , itfName , prefix )
127+ }
128+
129+ // run post-up commands
130+ for _ , cmd := range s .PostUp {
131+ err = ExecSplit (s .Log , cmd )
114132 if err != nil {
115- return err
133+ s . Log . Error ( "failed to run post-up command" , " err" , err )
116134 }
117135 }
118136 }
@@ -125,7 +143,25 @@ listen_port=%d
125143}
126144
127145func (n * Nylon ) cleanupWireGuard (s * state.State ) error {
128- return CleanupWireGuardDevice (s , n )
146+ // run pre-down commands
147+ for _ , cmd := range s .PreUp {
148+ err := ExecSplit (s .Log , cmd )
149+ if err != nil {
150+ s .Log .Error ("failed to run pre-down command" , "err" , err )
151+ }
152+ }
153+ err := CleanupWireGuardDevice (s , n )
154+ if err != nil {
155+ return err
156+ }
157+ // run post-down commands
158+ for _ , cmd := range s .PostDown {
159+ err = ExecSplit (s .Log , cmd )
160+ if err != nil {
161+ s .Log .Error ("failed to run post-down command" , "err" , err )
162+ }
163+ }
164+ return nil
129165}
130166
131167func UpdateWireGuard (s * state.State ) error {
0 commit comments