Merge pull request 'Agent: translate traffic-control long-tail (mangle/accounting/tc_*)' (#7) from benvin/agent-longtail-tc into main
Reviewed-on: #7
This commit was merged in pull request #7.
This commit is contained in:
@@ -31,6 +31,92 @@ type RenderedConfig struct {
|
||||
ProxyNDP []RenderedProxy `yaml:"proxy_ndp,omitempty" json:"proxy_ndp,omitempty"`
|
||||
ArpRules []RenderedArpRule `yaml:"arp_rules,omitempty" json:"arp_rules,omitempty"`
|
||||
Maclist []RenderedMaclist `yaml:"maclist,omitempty" json:"maclist,omitempty"`
|
||||
Mangle []RenderedMangle `yaml:"mangle,omitempty" json:"mangle,omitempty"`
|
||||
Accounting []RenderedAccounting `yaml:"accounting,omitempty" json:"accounting,omitempty"`
|
||||
TCDevices []RenderedTCDevice `yaml:"tc_devices,omitempty" json:"tc_devices,omitempty"`
|
||||
TCClasses []RenderedTCClass `yaml:"tc_classes,omitempty" json:"tc_classes,omitempty"`
|
||||
TCFilters []RenderedTCFilter `yaml:"tc_filters,omitempty" json:"tc_filters,omitempty"`
|
||||
TCInterfaces []RenderedTCInterface `yaml:"tc_interfaces,omitempty" json:"tc_interfaces,omitempty"`
|
||||
TCPriorities []RenderedTCPriority `yaml:"tc_priorities,omitempty" json:"tc_priorities,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedMangle struct {
|
||||
Action string `yaml:"action" json:"action"`
|
||||
Chain string `yaml:"chain,omitempty" json:"chain,omitempty"`
|
||||
MarkValue string `yaml:"mark_value,omitempty" json:"mark_value,omitempty"`
|
||||
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"`
|
||||
User string `yaml:"user,omitempty" json:"user,omitempty"`
|
||||
Mark string `yaml:"mark,omitempty" json:"mark,omitempty"`
|
||||
Length string `yaml:"length,omitempty" json:"length,omitempty"`
|
||||
TOS string `yaml:"tos,omitempty" json:"tos,omitempty"`
|
||||
Helper string `yaml:"helper,omitempty" json:"helper,omitempty"`
|
||||
Probability *float64 `yaml:"probability,omitempty" json:"probability,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedAccounting struct {
|
||||
Action string `yaml:"action" json:"action"`
|
||||
Section string `yaml:"section,omitempty" json:"section,omitempty"`
|
||||
Chain string `yaml:"chain,omitempty" json:"chain,omitempty"`
|
||||
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"`
|
||||
Mark string `yaml:"mark,omitempty" json:"mark,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedTCDevice struct {
|
||||
Interface string `yaml:"interface" json:"interface"`
|
||||
InBandwidth string `yaml:"in_bandwidth,omitempty" json:"in_bandwidth,omitempty"`
|
||||
OutBandwidth string `yaml:"out_bandwidth,omitempty" json:"out_bandwidth,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedTCClass struct {
|
||||
Interface string `yaml:"interface" json:"interface"`
|
||||
Mark int `yaml:"mark,omitempty" json:"mark,omitempty"`
|
||||
Rate string `yaml:"rate,omitempty" json:"rate,omitempty"`
|
||||
Ceil string `yaml:"ceil,omitempty" json:"ceil,omitempty"`
|
||||
Priority int `yaml:"priority,omitempty" json:"priority,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedTCFilter struct {
|
||||
Class string `yaml:"class" json:"class"`
|
||||
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"`
|
||||
TOS string `yaml:"tos,omitempty" json:"tos,omitempty"`
|
||||
Length int `yaml:"length,omitempty" json:"length,omitempty"`
|
||||
Priority int `yaml:"priority,omitempty" json:"priority,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedTCInterface struct {
|
||||
Interface string `yaml:"interface" json:"interface"`
|
||||
Type string `yaml:"type,omitempty" json:"type,omitempty"`
|
||||
InBandwidth string `yaml:"in_bandwidth,omitempty" json:"in_bandwidth,omitempty"`
|
||||
OutBandwidth string `yaml:"out_bandwidth,omitempty" json:"out_bandwidth,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedTCPriority struct {
|
||||
Band int `yaml:"band" json:"band"`
|
||||
Proto string `yaml:"proto,omitempty" json:"proto,omitempty"`
|
||||
DPort []string `yaml:"dport,omitempty" json:"dport,omitempty"`
|
||||
SPort []string `yaml:"sport,omitempty" json:"sport,omitempty"`
|
||||
Address string `yaml:"address,omitempty" json:"address,omitempty"`
|
||||
Interface string `yaml:"interface,omitempty" json:"interface,omitempty"`
|
||||
Helper string `yaml:"helper,omitempty" json:"helper,omitempty"`
|
||||
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
type RenderedTunnel struct {
|
||||
|
||||
@@ -143,6 +143,53 @@ func Translate(rc *RenderedConfig) (*config.Config, error) {
|
||||
})
|
||||
}
|
||||
|
||||
for _, m := range rc.Mangle {
|
||||
mr := config.MangleRule{
|
||||
Action: config.MangleAction(m.Action), Chain: config.MangleChain(m.Chain), MarkValue: m.MarkValue,
|
||||
Source: m.Source, Dest: m.Dest, Proto: m.Proto, DPort: config.PortSpec(m.DPort), SPort: config.PortSpec(m.SPort),
|
||||
User: m.User, Mark: m.Mark, Length: m.Length, TOS: m.TOS, Helper: m.Helper, Comment: m.Comment,
|
||||
}
|
||||
if m.Probability != nil {
|
||||
mr.Probability = *m.Probability
|
||||
}
|
||||
cfg.Mangle = append(cfg.Mangle, mr)
|
||||
}
|
||||
for _, a := range rc.Accounting {
|
||||
cfg.Accounting = append(cfg.Accounting, config.AccountingRule{
|
||||
Action: config.AccountingAction(a.Action), Section: config.AccountingSection(a.Section), Chain: a.Chain,
|
||||
Source: a.Source, Dest: a.Dest, Proto: a.Proto, DPort: config.PortSpec(a.DPort), SPort: config.PortSpec(a.SPort),
|
||||
Mark: a.Mark, Comment: a.Comment,
|
||||
})
|
||||
}
|
||||
for _, t := range rc.TCDevices {
|
||||
cfg.TCDevices = append(cfg.TCDevices, config.TCDevice{
|
||||
Interface: t.Interface, InBandwidth: t.InBandwidth, OutBandwidth: t.OutBandwidth, Comment: t.Comment,
|
||||
})
|
||||
}
|
||||
for _, t := range rc.TCClasses {
|
||||
cfg.TCClasses = append(cfg.TCClasses, config.TCClass{
|
||||
Interface: t.Interface, Mark: t.Mark, Rate: t.Rate, Ceil: t.Ceil, Priority: t.Priority, Comment: t.Comment,
|
||||
})
|
||||
}
|
||||
for _, t := range rc.TCFilters {
|
||||
cfg.TCFilters = append(cfg.TCFilters, config.TCFilter{
|
||||
Class: t.Class, Source: t.Source, Dest: t.Dest, Proto: t.Proto,
|
||||
DPort: config.PortSpec(t.DPort), SPort: config.PortSpec(t.SPort),
|
||||
TOS: t.TOS, Length: t.Length, Priority: t.Priority, Comment: t.Comment,
|
||||
})
|
||||
}
|
||||
for _, t := range rc.TCInterfaces {
|
||||
cfg.TCInterfaces = append(cfg.TCInterfaces, config.TCInterface{
|
||||
Interface: t.Interface, Type: t.Type, InBandwidth: t.InBandwidth, OutBandwidth: t.OutBandwidth, Comment: t.Comment,
|
||||
})
|
||||
}
|
||||
for _, t := range rc.TCPriorities {
|
||||
cfg.TCPriorities = append(cfg.TCPriorities, config.TCPriority{
|
||||
Band: t.Band, Proto: t.Proto, DPort: config.PortSpec(t.DPort), SPort: config.PortSpec(t.SPort),
|
||||
Address: t.Address, Interface: t.Interface, Helper: t.Helper, Comment: t.Comment,
|
||||
})
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user