Ver código fonte

Hide internal kernel fallback dummy interfaces (gre0, gretap0, erspan0) like MikroTik

Proxmox Router 1 semana atrás
pai
commit
68790a3cc3
2 arquivos alterados com 20 adições e 2 exclusões
  1. 14 1
      internal/network/manager.go
  2. 6 1
      internal/web/static/app.js

+ 14 - 1
internal/network/manager.go

@@ -30,6 +30,19 @@ func NewManager(mm *MetadataManager) *Manager {
 	}
 }
 
+// IsKernelDummyInterface returns true if link is an internal kernel fallback/dummy device (e.g. gre0, gretap0, erspan0)
+func IsKernelDummyInterface(name string) bool {
+	if strings.HasPrefix(name, "ep_") {
+		return true
+	}
+	switch name {
+	case "gre0", "gretap0", "erspan0", "sit0", "tunl0", "ip6tnl0", "ip6gre0", "ip6erspan0":
+		return true
+	default:
+		return false
+	}
+}
+
 // ListInterfaces returns all network links on the system.
 func (m *Manager) ListInterfaces() ([]InterfaceInfo, error) {
 	links, err := netlink.LinkList()
@@ -50,7 +63,7 @@ func (m *Manager) ListInterfaces() ([]InterfaceInfo, error) {
 
 	for _, link := range links {
 		attrs := link.Attrs()
-		if strings.HasPrefix(attrs.Name, "ep_") {
+		if IsKernelDummyInterface(attrs.Name) {
 			continue
 		}
 		info := InterfaceInfo{

+ 6 - 1
internal/web/static/app.js

@@ -131,7 +131,12 @@ async function fetchData(isManual = false) {
     if (statusRes.ok) state.systemStatus = await statusRes.json();
     if (ifacesRes.ok) {
       const ifacesData = await ifacesRes.json();
-      state.interfaces = Array.isArray(ifacesData) ? ifacesData : [];
+      const rawIfaces = Array.isArray(ifacesData) ? ifacesData : [];
+      state.interfaces = rawIfaces.filter(i => {
+        if (!i.name) return false;
+        if (i.name.startsWith('ep_')) return false;
+        return !['gre0', 'gretap0', 'erspan0', 'sit0', 'tunl0', 'ip6tnl0', 'ip6gre0', 'ip6erspan0'].includes(i.name);
+      });
     }
     if (vlansRes.ok) {
       const vlansData = await vlansRes.json();