libnet/iptables: DeleteConntrack: use structured logs

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn
2026-05-05 13:05:48 +02:00
parent 2ed9c69d99
commit c2d6c1e4a7

View File

@@ -37,7 +37,10 @@ func DeleteConntrackEntries(nlh nlwrap.Handle, ipv4List []net.IP, ipv6List []net
for _, ipAddress := range ipv4List {
flowPurged, err := purgeConntrackState(nlh, syscall.AF_INET, ipAddress)
if err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for %s: %v", ipAddress, err)
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"ipAddress": ipAddress.String(),
}).Warn("Failed to delete conntrack state for IPv4-address")
continue
}
totalIPv4FlowPurged += flowPurged
@@ -47,14 +50,20 @@ func DeleteConntrackEntries(nlh nlwrap.Handle, ipv4List []net.IP, ipv6List []net
for _, ipAddress := range ipv6List {
flowPurged, err := purgeConntrackState(nlh, syscall.AF_INET6, ipAddress)
if err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for %s: %v", ipAddress, err)
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"ipAddress": ipAddress.String(),
}).Warn("Failed to delete conntrack state for IPv6-address")
continue
}
totalIPv6FlowPurged += flowPurged
}
if totalIPv4FlowPurged > 0 || totalIPv6FlowPurged > 0 {
log.G(context.TODO()).Debugf("DeleteConntrackEntries purged ipv4:%d, ipv6:%d", totalIPv4FlowPurged, totalIPv6FlowPurged)
log.G(context.TODO()).WithFields(log.Fields{
"ipv4": totalIPv4FlowPurged,
"ipv6": totalIPv6FlowPurged,
}).Debug("DeleteConntrackEntries completed deleting conntrack state")
}
return nil
@@ -71,34 +80,63 @@ func DeleteConntrackEntriesByPort(nlh nlwrap.Handle, proto types.Protocol, ports
var totalIPv6FlowPurged uint
for _, port := range ports {
filter := &netlink.ConntrackFilter{}
if err := filter.AddProtocol(uint8(proto)); err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for %s port %d: %v", proto.String(), port.Port, err)
if err := filter.AddProtocol(uint8(port.Proto)); err != nil {
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"hostIP": port.HostIP.String(),
"proto": port.Proto.String(),
"port": port.Port,
}).Warn("Failed to delete conntrack state for port")
continue
}
if err := filter.AddPort(netlink.ConntrackOrigDstPort, port.Port); err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for %s port %d: %v", proto.String(), port.Port, err)
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"hostIP": port.HostIP.String(),
"proto": port.Proto.String(),
"port": port.Port,
}).Warn("Failed to delete conntrack state for port")
continue
}
if err := filter.AddIP(netlink.ConntrackOrigDstIP, port.HostIP); err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for %s port %d: %v", proto.String(), port.Port, err)
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"hostIP": port.HostIP.String(),
"proto": port.Proto.String(),
"port": port.Port,
}).Warn("Failed to delete conntrack state for port")
continue
}
v4FlowPurged, err := nlh.ConntrackDeleteFilters(netlink.ConntrackTable, syscall.AF_INET, filter)
if err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for IPv4 %s port %d: %v", proto.String(), port.Port, err)
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"hostIP": port.HostIP.String(),
"proto": port.Proto.String(),
"port": port.Port,
}).Warn("Failed to delete conntrack state for IPv4 port")
}
totalIPv4FlowPurged += v4FlowPurged
v6FlowPurged, err := nlh.ConntrackDeleteFilters(netlink.ConntrackTable, syscall.AF_INET6, filter)
if err != nil {
log.G(context.TODO()).Warnf("Failed to delete conntrack state for IPv6 %s port %d: %v", proto.String(), port.Port, err)
log.G(context.TODO()).WithFields(log.Fields{
"error": err,
"hostIP": port.HostIP.String(),
"proto": port.Proto.String(),
"port": port.Port,
}).Warn("Failed to delete conntrack state for IPv6 port")
}
totalIPv6FlowPurged += v6FlowPurged
}
if totalIPv4FlowPurged > 0 || totalIPv6FlowPurged > 0 {
log.G(context.TODO()).Debugf("DeleteConntrackEntriesByPort for %s ports purged ipv4:%d, ipv6:%d", proto.String(), totalIPv4FlowPurged, totalIPv6FlowPurged)
log.G(context.TODO()).WithFields(log.Fields{
"ipv4": totalIPv4FlowPurged,
"ipv6": totalIPv6FlowPurged,
"proto": proto.String(),
}).Debug("DeleteConntrackEntriesByPort completed deleting conntrack state")
}
return nil