Files
kor-elf-shield/internal/daemon/docker_monitor/client/bridge.go
Leonid Nikitin c424621615 Add Docker support with nftables integration
- Introduced Docker monitoring to manage nftables rules.
- Added `docker_support` option to firewall configuration.
- Integrated Docker bridge, container handling, and related network rules.
- Updated default configurations for Docker path and settings.
- Enhanced `daemon` lifecycle for Docker integration.
2026-01-04 13:59:26 +05:00

67 lines
1.6 KiB
Go

package client
import (
"fmt"
"strings"
)
func (d *docker) Bridges() ([]string, error) {
args := []string{"network", "ls", "-q", "--filter", "Driver=bridge"}
result, err := d.command(args...)
if err != nil {
return nil, fmt.Errorf("failed to get docker bridge names: %s", err.Error())
}
output := strings.TrimSpace(string(result))
if output == "" {
return []string{}, nil
}
lines := strings.Split(output, "\n")
for i := range lines {
lines[i] = strings.TrimSpace(lines[i])
}
return lines, nil
}
func (d *docker) BridgeNames() ([]string, error) {
bridges, err := d.Bridges()
if err != nil {
return nil, err
}
var names []string
for _, bridge := range bridges {
bridgeName, err := d.BridgeName(bridge)
if err != nil {
d.logger.Error(err.Error())
continue
}
names = append(names, bridgeName)
}
return names, nil
}
func (d *docker) BridgeName(bridgeID string) (string, error) {
format := fmt.Sprintf(`{{"br-%s" | or (index .Options "com.docker.network.bridge.name")}}`, bridgeID)
args := []string{"network", "inspect", "-f", format, bridgeID}
result, err := d.command(args...)
if err != nil {
return "", fmt.Errorf("failed to get bridge name: %s", err.Error())
}
return strings.TrimSpace(string(result)), nil
}
func (d *docker) BridgeSubnet(bridgeID string) (string, error) {
format := fmt.Sprintf(`{{range .IPAM.Config}}{{.Subnet}}{{end}}`)
args := []string{"network", "inspect", "-f", format, bridgeID}
result, err := d.command(args...)
if err != nil {
return "", fmt.Errorf("failed to get bridge subnet: %s", err.Error())
}
return strings.TrimSpace(string(result)), nil
}