@@ -18,31 +18,41 @@ package bypass4netnsutil
18
18
19
19
import (
20
20
"context"
21
+ "encoding/json"
21
22
"fmt"
22
23
"net"
23
24
"path/filepath"
24
25
25
26
"github.com/containerd/containerd/errdefs"
26
27
gocni "github.com/containerd/go-cni"
28
+ "github.com/containerd/nerdctl/v2/pkg/annotations"
27
29
b4nnapi "github.com/rootless-containers/bypass4netns/pkg/api"
28
30
"github.com/rootless-containers/bypass4netns/pkg/api/daemon/client"
29
31
rlkclient "github.com/rootless-containers/rootlesskit/v2/pkg/api/client"
30
32
)
31
33
32
- func NewBypass4netnsCNIBypassManager (client client.Client , rlkClient rlkclient.Client ) (* Bypass4netnsCNIBypassManager , error ) {
34
+ func NewBypass4netnsCNIBypassManager (client client.Client , rlkClient rlkclient.Client , annotationsMap map [ string ] string ) (* Bypass4netnsCNIBypassManager , error ) {
33
35
if client == nil || rlkClient == nil {
34
36
return nil , errdefs .ErrInvalidArgument
35
37
}
38
+ var ignoreSubnets []string
39
+ if v := annotationsMap [annotations .Bypass4netnsIgnoreSubnets ]; v != "" {
40
+ if err := json .Unmarshal ([]byte (v ), & ignoreSubnets ); err != nil {
41
+ return nil , fmt .Errorf ("failed to unmarshal annotation %q: %q: %w" , annotations .Bypass4netnsIgnoreSubnets , v , err )
42
+ }
43
+ }
36
44
pm := & Bypass4netnsCNIBypassManager {
37
- Client : client ,
38
- rlkClient : rlkClient ,
45
+ Client : client ,
46
+ rlkClient : rlkClient ,
47
+ ignoreSubnets : ignoreSubnets ,
39
48
}
40
49
return pm , nil
41
50
}
42
51
43
52
type Bypass4netnsCNIBypassManager struct {
44
53
client.Client
45
- rlkClient rlkclient.Client
54
+ rlkClient rlkclient.Client
55
+ ignoreSubnets []string
46
56
}
47
57
48
58
func (b4nnm * Bypass4netnsCNIBypassManager ) StartBypass (ctx context.Context , ports []gocni.PortMapping , id , stateDir string ) error {
@@ -73,7 +83,7 @@ func (b4nnm *Bypass4netnsCNIBypassManager) StartBypass(ctx context.Context, port
73
83
PidFilePath : pidFilePath ,
74
84
LogFilePath : logFilePath ,
75
85
// "auto" can detect CNI CIDRs automatically
76
- IgnoreSubnets : []string {"127.0.0.0/8" , rlkCIDR , "auto" },
86
+ IgnoreSubnets : append ( []string {"127.0.0.0/8" , rlkCIDR , "auto" }, b4nnm . ignoreSubnets ... ) ,
77
87
}
78
88
portMap := []b4nnapi.PortSpec {}
79
89
for _ , p := range ports {
0 commit comments