package compiler import "git.unkin.net/unkin/tomswallapi/internal/model" // Per-device L2/misc long-tail sections rendered into a device's config. type RenderedTunnel struct { Type string `yaml:"type" json:"type"` Zone string `yaml:"zone" json:"zone"` Gateways []string `yaml:"gateways,omitempty" json:"gateways,omitempty"` GatewayZones []string `yaml:"gateway_zones,omitempty" json:"gateway_zones,omitempty"` Port int `yaml:"port,omitempty" json:"port,omitempty"` Comment string `yaml:"comment,omitempty" json:"comment,omitempty"` } type RenderedStoppedRule struct { Action string `yaml:"action" json:"action"` Source string `yaml:"source,omitempty" json:"source,omitempty"` Dest string `yaml:"dest,omitempty" json:"dest,omitempty"` Proto string `yaml:"proto,omitempty" json:"proto,omitempty"` DPort []string `yaml:"dport,omitempty" json:"dport,omitempty"` SPort []string `yaml:"sport,omitempty" json:"sport,omitempty"` Comment string `yaml:"comment,omitempty" json:"comment,omitempty"` } type RenderedProxy struct { Address string `yaml:"address" json:"address"` Interface string `yaml:"interface,omitempty" json:"interface,omitempty"` External string `yaml:"external" json:"external"` HaveRoute bool `yaml:"haveroute,omitempty" json:"haveroute,omitempty"` Persistent bool `yaml:"persistent,omitempty" json:"persistent,omitempty"` Comment string `yaml:"comment,omitempty" json:"comment,omitempty"` } type RenderedArpRule struct { Action string `yaml:"action" json:"action"` ActionAddress string `yaml:"action_address,omitempty" json:"action_address,omitempty"` ActionMAC string `yaml:"action_mac,omitempty" json:"action_mac,omitempty"` Source string `yaml:"source,omitempty" json:"source,omitempty"` Dest string `yaml:"dest,omitempty" json:"dest,omitempty"` Opcode int `yaml:"opcode,omitempty" json:"opcode,omitempty"` Comment string `yaml:"comment,omitempty" json:"comment,omitempty"` } type RenderedMaclist struct { Action string `yaml:"action" json:"action"` Interface string `yaml:"interface" json:"interface"` MAC string `yaml:"mac,omitempty" json:"mac,omitempty"` Addresses []string `yaml:"addresses,omitempty" json:"addresses,omitempty"` Log string `yaml:"log,omitempty" json:"log,omitempty"` Comment string `yaml:"comment,omitempty" json:"comment,omitempty"` } func renderPerDeviceL2(in Input, out *RenderedConfig) { dev := in.Device.Name for _, t := range in.Tunnels { if t.Device != dev { continue } out.Tunnels = append(out.Tunnels, RenderedTunnel{ Type: t.Type, Zone: t.Zone, Gateways: t.Gateways, GatewayZones: t.GatewayZones, Port: t.Port, Comment: t.Comment, }) } for _, r := range in.StoppedRules { if r.Device != dev { continue } out.StoppedRules = append(out.StoppedRules, RenderedStoppedRule{ Action: r.Action, Source: r.Source, Dest: r.Dest, Proto: r.Proto, DPort: r.DPort, SPort: r.SPort, Comment: r.Comment, }) } for _, p := range in.ProxyARP { if p.Device != dev { continue } out.ProxyARP = append(out.ProxyARP, renderProxy(p)) } for _, p := range in.ProxyNDP { if p.Device != dev { continue } out.ProxyNDP = append(out.ProxyNDP, renderProxy(p)) } for _, a := range in.ArpRules { if a.Device != dev { continue } out.ArpRules = append(out.ArpRules, RenderedArpRule{ Action: a.Action, ActionAddress: a.ActionAddress, ActionMAC: a.ActionMAC, Source: a.Source, Dest: a.Dest, Opcode: a.Opcode, Comment: a.Comment, }) } for _, m := range in.Maclist { if m.Device != dev { continue } out.Maclist = append(out.Maclist, RenderedMaclist{ Action: m.Action, Interface: m.Interface, MAC: m.MAC, Addresses: m.Addresses, Log: m.Log, Comment: m.Comment, }) } } func renderProxy(p model.ProxyEntry) RenderedProxy { return RenderedProxy{ Address: p.Address, Interface: p.Interface, External: p.External, HaveRoute: p.HaveRoute, Persistent: p.Persistent, Comment: p.Comment, } }