1 package netlink
2
3 import (
4 "fmt"
5 "net"
6 "os"
7 "strconv"
8 )
9
10
11
12
13 type Link interface {
14 Attrs() *LinkAttrs
15 Type() string
16 }
17
18 type (
19 NsPid int
20 NsFd int
21 )
22
23
24 type LinkAttrs struct {
25 Index int
26 MTU int
27 TxQLen int
28 Name string
29 HardwareAddr net.HardwareAddr
30 Flags net.Flags
31 RawFlags uint32
32 ParentIndex int
33 MasterIndex int
34 Namespace interface{}
35 Alias string
36 AltNames []string
37 Statistics *LinkStatistics
38 Promisc int
39 Allmulti int
40 Multi int
41 Xdp *LinkXdp
42 EncapType string
43 Protinfo *Protinfo
44 OperState LinkOperState
45 PhysSwitchID int
46 NetNsID int
47 NumTxQueues int
48 NumRxQueues int
49 TSOMaxSegs uint32
50 TSOMaxSize uint32
51 GSOMaxSegs uint32
52 GSOMaxSize uint32
53 GROMaxSize uint32
54 GSOIPv4MaxSize uint32
55 GROIPv4MaxSize uint32
56 Vfs []VfInfo
57 Group uint32
58 PermHWAddr net.HardwareAddr
59 Slave LinkSlave
60 }
61
62
63 type LinkSlave interface {
64 SlaveType() string
65 }
66
67
68 type VfInfo struct {
69 ID int
70 Mac net.HardwareAddr
71 Vlan int
72 Qos int
73 VlanProto int
74 TxRate int
75 Spoofchk bool
76 LinkState uint32
77 MaxTxRate uint32
78 MinTxRate uint32
79 RxPackets uint64
80 TxPackets uint64
81 RxBytes uint64
82 TxBytes uint64
83 Multicast uint64
84 Broadcast uint64
85 RxDropped uint64
86 TxDropped uint64
87
88 RssQuery uint32
89 Trust uint32
90 }
91
92
93
94 type LinkOperState uint8
95
96 const (
97 OperUnknown = iota
98 OperNotPresent
99 OperDown
100 OperLowerLayerDown
101 OperTesting
102 OperDormant
103 OperUp
104 )
105
106 func (s LinkOperState) String() string {
107 switch s {
108 case OperNotPresent:
109 return "not-present"
110 case OperDown:
111 return "down"
112 case OperLowerLayerDown:
113 return "lower-layer-down"
114 case OperTesting:
115 return "testing"
116 case OperDormant:
117 return "dormant"
118 case OperUp:
119 return "up"
120 default:
121 return "unknown"
122 }
123 }
124
125
126 func NewLinkAttrs() LinkAttrs {
127 return LinkAttrs{
128 NetNsID: -1,
129 TxQLen: -1,
130 }
131 }
132
133 type LinkStatistics LinkStatistics64
134
135
138 type LinkStatistics32 struct {
139 RxPackets uint32
140 TxPackets uint32
141 RxBytes uint32
142 TxBytes uint32
143 RxErrors uint32
144 TxErrors uint32
145 RxDropped uint32
146 TxDropped uint32
147 Multicast uint32
148 Collisions uint32
149 RxLengthErrors uint32
150 RxOverErrors uint32
151 RxCrcErrors uint32
152 RxFrameErrors uint32
153 RxFifoErrors uint32
154 RxMissedErrors uint32
155 TxAbortedErrors uint32
156 TxCarrierErrors uint32
157 TxFifoErrors uint32
158 TxHeartbeatErrors uint32
159 TxWindowErrors uint32
160 RxCompressed uint32
161 TxCompressed uint32
162 }
163
164 func (s32 LinkStatistics32) to64() *LinkStatistics64 {
165 return &LinkStatistics64{
166 RxPackets: uint64(s32.RxPackets),
167 TxPackets: uint64(s32.TxPackets),
168 RxBytes: uint64(s32.RxBytes),
169 TxBytes: uint64(s32.TxBytes),
170 RxErrors: uint64(s32.RxErrors),
171 TxErrors: uint64(s32.TxErrors),
172 RxDropped: uint64(s32.RxDropped),
173 TxDropped: uint64(s32.TxDropped),
174 Multicast: uint64(s32.Multicast),
175 Collisions: uint64(s32.Collisions),
176 RxLengthErrors: uint64(s32.RxLengthErrors),
177 RxOverErrors: uint64(s32.RxOverErrors),
178 RxCrcErrors: uint64(s32.RxCrcErrors),
179 RxFrameErrors: uint64(s32.RxFrameErrors),
180 RxFifoErrors: uint64(s32.RxFifoErrors),
181 RxMissedErrors: uint64(s32.RxMissedErrors),
182 TxAbortedErrors: uint64(s32.TxAbortedErrors),
183 TxCarrierErrors: uint64(s32.TxCarrierErrors),
184 TxFifoErrors: uint64(s32.TxFifoErrors),
185 TxHeartbeatErrors: uint64(s32.TxHeartbeatErrors),
186 TxWindowErrors: uint64(s32.TxWindowErrors),
187 RxCompressed: uint64(s32.RxCompressed),
188 TxCompressed: uint64(s32.TxCompressed),
189 }
190 }
191
192
195 type LinkStatistics64 struct {
196 RxPackets uint64
197 TxPackets uint64
198 RxBytes uint64
199 TxBytes uint64
200 RxErrors uint64
201 TxErrors uint64
202 RxDropped uint64
203 TxDropped uint64
204 Multicast uint64
205 Collisions uint64
206 RxLengthErrors uint64
207 RxOverErrors uint64
208 RxCrcErrors uint64
209 RxFrameErrors uint64
210 RxFifoErrors uint64
211 RxMissedErrors uint64
212 TxAbortedErrors uint64
213 TxCarrierErrors uint64
214 TxFifoErrors uint64
215 TxHeartbeatErrors uint64
216 TxWindowErrors uint64
217 RxCompressed uint64
218 TxCompressed uint64
219 }
220
221 type LinkXdp struct {
222 Fd int
223 Attached bool
224 AttachMode uint32
225 Flags uint32
226 ProgId uint32
227 }
228
229
230
231 type Device struct {
232 LinkAttrs
233 }
234
235 func (device *Device) Attrs() *LinkAttrs {
236 return &device.LinkAttrs
237 }
238
239 func (device *Device) Type() string {
240 return "device"
241 }
242
243
244 type Dummy struct {
245 LinkAttrs
246 }
247
248 func (dummy *Dummy) Attrs() *LinkAttrs {
249 return &dummy.LinkAttrs
250 }
251
252 func (dummy *Dummy) Type() string {
253 return "dummy"
254 }
255
256
257 type Ifb struct {
258 LinkAttrs
259 }
260
261 func (ifb *Ifb) Attrs() *LinkAttrs {
262 return &ifb.LinkAttrs
263 }
264
265 func (ifb *Ifb) Type() string {
266 return "ifb"
267 }
268
269
270 type Bridge struct {
271 LinkAttrs
272 MulticastSnooping *bool
273 AgeingTime *uint32
274 HelloTime *uint32
275 VlanFiltering *bool
276 VlanDefaultPVID *uint16
277 GroupFwdMask *uint16
278 }
279
280 func (bridge *Bridge) Attrs() *LinkAttrs {
281 return &bridge.LinkAttrs
282 }
283
284 func (bridge *Bridge) Type() string {
285 return "bridge"
286 }
287
288
289 type Vlan struct {
290 LinkAttrs
291 VlanId int
292 VlanProtocol VlanProtocol
293 }
294
295 func (vlan *Vlan) Attrs() *LinkAttrs {
296 return &vlan.LinkAttrs
297 }
298
299 func (vlan *Vlan) Type() string {
300 return "vlan"
301 }
302
303 type MacvlanMode uint16
304
305 const (
306 MACVLAN_MODE_DEFAULT MacvlanMode = iota
307 MACVLAN_MODE_PRIVATE
308 MACVLAN_MODE_VEPA
309 MACVLAN_MODE_BRIDGE
310 MACVLAN_MODE_PASSTHRU
311 MACVLAN_MODE_SOURCE
312 )
313
314
315 type Macvlan struct {
316 LinkAttrs
317 Mode MacvlanMode
318
319
320 MACAddrs []net.HardwareAddr
321
322 BCQueueLen uint32
323 UsedBCQueueLen uint32
324 }
325
326 func (macvlan *Macvlan) Attrs() *LinkAttrs {
327 return &macvlan.LinkAttrs
328 }
329
330 func (macvlan *Macvlan) Type() string {
331 return "macvlan"
332 }
333
334
335 type Macvtap struct {
336 Macvlan
337 }
338
339 func (macvtap Macvtap) Type() string {
340 return "macvtap"
341 }
342
343 type TuntapMode uint16
344 type TuntapFlag uint16
345
346
347 type Tuntap struct {
348 LinkAttrs
349 Mode TuntapMode
350 Flags TuntapFlag
351 NonPersist bool
352 Queues int
353 Fds []*os.File
354 Owner uint32
355 Group uint32
356 }
357
358 func (tuntap *Tuntap) Attrs() *LinkAttrs {
359 return &tuntap.LinkAttrs
360 }
361
362 func (tuntap *Tuntap) Type() string {
363 return "tuntap"
364 }
365
366 type NetkitMode uint32
367
368 const (
369 NETKIT_MODE_L2 NetkitMode = iota
370 NETKIT_MODE_L3
371 )
372
373 type NetkitPolicy int
374
375 const (
376 NETKIT_POLICY_FORWARD NetkitPolicy = 0
377 NETKIT_POLICY_BLACKHOLE NetkitPolicy = 2
378 )
379
380 func (n *Netkit) IsPrimary() bool {
381 return n.isPrimary
382 }
383
384
385 func (n *Netkit) SetPeerAttrs(Attrs *LinkAttrs) {
386 n.peerLinkAttrs = *Attrs
387 }
388
389 type Netkit struct {
390 LinkAttrs
391 Mode NetkitMode
392 Policy NetkitPolicy
393 PeerPolicy NetkitPolicy
394 isPrimary bool
395 peerLinkAttrs LinkAttrs
396 }
397
398 func (n *Netkit) Attrs() *LinkAttrs {
399 return &n.LinkAttrs
400 }
401
402 func (n *Netkit) Type() string {
403 return "netkit"
404 }
405
406
407 type Veth struct {
408 LinkAttrs
409 PeerName string
410 PeerHardwareAddr net.HardwareAddr
411 PeerNamespace interface{}
412 }
413
414 func (veth *Veth) Attrs() *LinkAttrs {
415 return &veth.LinkAttrs
416 }
417
418 func (veth *Veth) Type() string {
419 return "veth"
420 }
421
422
423 type Wireguard struct {
424 LinkAttrs
425 }
426
427 func (wg *Wireguard) Attrs() *LinkAttrs {
428 return &wg.LinkAttrs
429 }
430
431 func (wg *Wireguard) Type() string {
432 return "wireguard"
433 }
434
435
436
437 type GenericLink struct {
438 LinkAttrs
439 LinkType string
440 }
441
442 func (generic *GenericLink) Attrs() *LinkAttrs {
443 return &generic.LinkAttrs
444 }
445
446 func (generic *GenericLink) Type() string {
447 return generic.LinkType
448 }
449
450 type Vxlan struct {
451 LinkAttrs
452 VxlanId int
453 VtepDevIndex int
454 SrcAddr net.IP
455 Group net.IP
456 TTL int
457 TOS int
458 Learning bool
459 Proxy bool
460 RSC bool
461 L2miss bool
462 L3miss bool
463 UDPCSum bool
464 UDP6ZeroCSumTx bool
465 UDP6ZeroCSumRx bool
466 NoAge bool
467 GBP bool
468 FlowBased bool
469 Age int
470 Limit int
471 Port int
472 PortLow int
473 PortHigh int
474 }
475
476 func (vxlan *Vxlan) Attrs() *LinkAttrs {
477 return &vxlan.LinkAttrs
478 }
479
480 func (vxlan *Vxlan) Type() string {
481 return "vxlan"
482 }
483
484 type IPVlanMode uint16
485
486 const (
487 IPVLAN_MODE_L2 IPVlanMode = iota
488 IPVLAN_MODE_L3
489 IPVLAN_MODE_L3S
490 IPVLAN_MODE_MAX
491 )
492
493 type IPVlanFlag uint16
494
495 const (
496 IPVLAN_FLAG_BRIDGE IPVlanFlag = iota
497 IPVLAN_FLAG_PRIVATE
498 IPVLAN_FLAG_VEPA
499 )
500
501 type IPVlan struct {
502 LinkAttrs
503 Mode IPVlanMode
504 Flag IPVlanFlag
505 }
506
507 func (ipvlan *IPVlan) Attrs() *LinkAttrs {
508 return &ipvlan.LinkAttrs
509 }
510
511 func (ipvlan *IPVlan) Type() string {
512 return "ipvlan"
513 }
514
515
516 type IPVtap struct {
517 IPVlan
518 }
519
520 func (ipvtap *IPVtap) Attrs() *LinkAttrs {
521 return &ipvtap.LinkAttrs
522 }
523
524 func (ipvtap IPVtap) Type() string {
525 return "ipvtap"
526 }
527
528
529 type VlanProtocol int
530
531 func (p VlanProtocol) String() string {
532 s, ok := VlanProtocolToString[p]
533 if !ok {
534 return fmt.Sprintf("VlanProtocol(%d)", p)
535 }
536 return s
537 }
538
539
540 func StringToVlanProtocol(s string) VlanProtocol {
541 mode, ok := StringToVlanProtocolMap[s]
542 if !ok {
543 return VLAN_PROTOCOL_UNKNOWN
544 }
545 return mode
546 }
547
548
549 const (
550 VLAN_PROTOCOL_UNKNOWN VlanProtocol = 0
551 VLAN_PROTOCOL_8021Q VlanProtocol = 0x8100
552 VLAN_PROTOCOL_8021AD VlanProtocol = 0x88A8
553 )
554
555 var VlanProtocolToString = map[VlanProtocol]string{
556 VLAN_PROTOCOL_8021Q: "802.1q",
557 VLAN_PROTOCOL_8021AD: "802.1ad",
558 }
559
560 var StringToVlanProtocolMap = map[string]VlanProtocol{
561 "802.1q": VLAN_PROTOCOL_8021Q,
562 "802.1ad": VLAN_PROTOCOL_8021AD,
563 }
564
565
566 type BondMode int
567
568 func (b BondMode) String() string {
569 s, ok := bondModeToString[b]
570 if !ok {
571 return fmt.Sprintf("BondMode(%d)", b)
572 }
573 return s
574 }
575
576
577 func StringToBondMode(s string) BondMode {
578 mode, ok := StringToBondModeMap[s]
579 if !ok {
580 return BOND_MODE_UNKNOWN
581 }
582 return mode
583 }
584
585
586 const (
587 BOND_MODE_BALANCE_RR BondMode = iota
588 BOND_MODE_ACTIVE_BACKUP
589 BOND_MODE_BALANCE_XOR
590 BOND_MODE_BROADCAST
591 BOND_MODE_802_3AD
592 BOND_MODE_BALANCE_TLB
593 BOND_MODE_BALANCE_ALB
594 BOND_MODE_UNKNOWN
595 )
596
597 var bondModeToString = map[BondMode]string{
598 BOND_MODE_BALANCE_RR: "balance-rr",
599 BOND_MODE_ACTIVE_BACKUP: "active-backup",
600 BOND_MODE_BALANCE_XOR: "balance-xor",
601 BOND_MODE_BROADCAST: "broadcast",
602 BOND_MODE_802_3AD: "802.3ad",
603 BOND_MODE_BALANCE_TLB: "balance-tlb",
604 BOND_MODE_BALANCE_ALB: "balance-alb",
605 }
606 var StringToBondModeMap = map[string]BondMode{
607 "balance-rr": BOND_MODE_BALANCE_RR,
608 "active-backup": BOND_MODE_ACTIVE_BACKUP,
609 "balance-xor": BOND_MODE_BALANCE_XOR,
610 "broadcast": BOND_MODE_BROADCAST,
611 "802.3ad": BOND_MODE_802_3AD,
612 "balance-tlb": BOND_MODE_BALANCE_TLB,
613 "balance-alb": BOND_MODE_BALANCE_ALB,
614 }
615
616
617 type BondArpValidate int
618
619
620 const (
621 BOND_ARP_VALIDATE_NONE BondArpValidate = iota
622 BOND_ARP_VALIDATE_ACTIVE
623 BOND_ARP_VALIDATE_BACKUP
624 BOND_ARP_VALIDATE_ALL
625 )
626
627 var bondArpValidateToString = map[BondArpValidate]string{
628 BOND_ARP_VALIDATE_NONE: "none",
629 BOND_ARP_VALIDATE_ACTIVE: "active",
630 BOND_ARP_VALIDATE_BACKUP: "backup",
631 BOND_ARP_VALIDATE_ALL: "none",
632 }
633 var StringToBondArpValidateMap = map[string]BondArpValidate{
634 "none": BOND_ARP_VALIDATE_NONE,
635 "active": BOND_ARP_VALIDATE_ACTIVE,
636 "backup": BOND_ARP_VALIDATE_BACKUP,
637 "all": BOND_ARP_VALIDATE_ALL,
638 }
639
640 func (b BondArpValidate) String() string {
641 s, ok := bondArpValidateToString[b]
642 if !ok {
643 return fmt.Sprintf("BondArpValidate(%d)", b)
644 }
645 return s
646 }
647
648
649 type BondPrimaryReselect int
650
651
652 const (
653 BOND_PRIMARY_RESELECT_ALWAYS BondPrimaryReselect = iota
654 BOND_PRIMARY_RESELECT_BETTER
655 BOND_PRIMARY_RESELECT_FAILURE
656 )
657
658 var bondPrimaryReselectToString = map[BondPrimaryReselect]string{
659 BOND_PRIMARY_RESELECT_ALWAYS: "always",
660 BOND_PRIMARY_RESELECT_BETTER: "better",
661 BOND_PRIMARY_RESELECT_FAILURE: "failure",
662 }
663 var StringToBondPrimaryReselectMap = map[string]BondPrimaryReselect{
664 "always": BOND_PRIMARY_RESELECT_ALWAYS,
665 "better": BOND_PRIMARY_RESELECT_BETTER,
666 "failure": BOND_PRIMARY_RESELECT_FAILURE,
667 }
668
669 func (b BondPrimaryReselect) String() string {
670 s, ok := bondPrimaryReselectToString[b]
671 if !ok {
672 return fmt.Sprintf("BondPrimaryReselect(%d)", b)
673 }
674 return s
675 }
676
677
678 type BondArpAllTargets int
679
680
681 const (
682 BOND_ARP_ALL_TARGETS_ANY BondArpAllTargets = iota
683 BOND_ARP_ALL_TARGETS_ALL
684 )
685
686 var bondArpAllTargetsToString = map[BondArpAllTargets]string{
687 BOND_ARP_ALL_TARGETS_ANY: "any",
688 BOND_ARP_ALL_TARGETS_ALL: "all",
689 }
690 var StringToBondArpAllTargetsMap = map[string]BondArpAllTargets{
691 "any": BOND_ARP_ALL_TARGETS_ANY,
692 "all": BOND_ARP_ALL_TARGETS_ALL,
693 }
694
695 func (b BondArpAllTargets) String() string {
696 s, ok := bondArpAllTargetsToString[b]
697 if !ok {
698 return fmt.Sprintf("BondArpAllTargets(%d)", b)
699 }
700 return s
701 }
702
703
704 type BondFailOverMac int
705
706
707 const (
708 BOND_FAIL_OVER_MAC_NONE BondFailOverMac = iota
709 BOND_FAIL_OVER_MAC_ACTIVE
710 BOND_FAIL_OVER_MAC_FOLLOW
711 )
712
713 var bondFailOverMacToString = map[BondFailOverMac]string{
714 BOND_FAIL_OVER_MAC_NONE: "none",
715 BOND_FAIL_OVER_MAC_ACTIVE: "active",
716 BOND_FAIL_OVER_MAC_FOLLOW: "follow",
717 }
718 var StringToBondFailOverMacMap = map[string]BondFailOverMac{
719 "none": BOND_FAIL_OVER_MAC_NONE,
720 "active": BOND_FAIL_OVER_MAC_ACTIVE,
721 "follow": BOND_FAIL_OVER_MAC_FOLLOW,
722 }
723
724 func (b BondFailOverMac) String() string {
725 s, ok := bondFailOverMacToString[b]
726 if !ok {
727 return fmt.Sprintf("BondFailOverMac(%d)", b)
728 }
729 return s
730 }
731
732
733 type BondXmitHashPolicy int
734
735 func (b BondXmitHashPolicy) String() string {
736 s, ok := bondXmitHashPolicyToString[b]
737 if !ok {
738 return fmt.Sprintf("XmitHashPolicy(%d)", b)
739 }
740 return s
741 }
742
743
744 func StringToBondXmitHashPolicy(s string) BondXmitHashPolicy {
745 lacp, ok := StringToBondXmitHashPolicyMap[s]
746 if !ok {
747 return BOND_XMIT_HASH_POLICY_UNKNOWN
748 }
749 return lacp
750 }
751
752
753 const (
754 BOND_XMIT_HASH_POLICY_LAYER2 BondXmitHashPolicy = iota
755 BOND_XMIT_HASH_POLICY_LAYER3_4
756 BOND_XMIT_HASH_POLICY_LAYER2_3
757 BOND_XMIT_HASH_POLICY_ENCAP2_3
758 BOND_XMIT_HASH_POLICY_ENCAP3_4
759 BOND_XMIT_HASH_POLICY_VLAN_SRCMAC
760 BOND_XMIT_HASH_POLICY_UNKNOWN
761 )
762
763 var bondXmitHashPolicyToString = map[BondXmitHashPolicy]string{
764 BOND_XMIT_HASH_POLICY_LAYER2: "layer2",
765 BOND_XMIT_HASH_POLICY_LAYER3_4: "layer3+4",
766 BOND_XMIT_HASH_POLICY_LAYER2_3: "layer2+3",
767 BOND_XMIT_HASH_POLICY_ENCAP2_3: "encap2+3",
768 BOND_XMIT_HASH_POLICY_ENCAP3_4: "encap3+4",
769 BOND_XMIT_HASH_POLICY_VLAN_SRCMAC: "vlan+srcmac",
770 }
771 var StringToBondXmitHashPolicyMap = map[string]BondXmitHashPolicy{
772 "layer2": BOND_XMIT_HASH_POLICY_LAYER2,
773 "layer3+4": BOND_XMIT_HASH_POLICY_LAYER3_4,
774 "layer2+3": BOND_XMIT_HASH_POLICY_LAYER2_3,
775 "encap2+3": BOND_XMIT_HASH_POLICY_ENCAP2_3,
776 "encap3+4": BOND_XMIT_HASH_POLICY_ENCAP3_4,
777 "vlan+srcmac": BOND_XMIT_HASH_POLICY_VLAN_SRCMAC,
778 }
779
780
781 type BondLacpRate int
782
783 func (b BondLacpRate) String() string {
784 s, ok := bondLacpRateToString[b]
785 if !ok {
786 return fmt.Sprintf("LacpRate(%d)", b)
787 }
788 return s
789 }
790
791
792 func StringToBondLacpRate(s string) BondLacpRate {
793 lacp, ok := StringToBondLacpRateMap[s]
794 if !ok {
795 return BOND_LACP_RATE_UNKNOWN
796 }
797 return lacp
798 }
799
800
801 const (
802 BOND_LACP_RATE_SLOW BondLacpRate = iota
803 BOND_LACP_RATE_FAST
804 BOND_LACP_RATE_UNKNOWN
805 )
806
807 var bondLacpRateToString = map[BondLacpRate]string{
808 BOND_LACP_RATE_SLOW: "slow",
809 BOND_LACP_RATE_FAST: "fast",
810 }
811 var StringToBondLacpRateMap = map[string]BondLacpRate{
812 "slow": BOND_LACP_RATE_SLOW,
813 "fast": BOND_LACP_RATE_FAST,
814 }
815
816
817 type BondAdSelect int
818
819
820 const (
821 BOND_AD_SELECT_STABLE BondAdSelect = iota
822 BOND_AD_SELECT_BANDWIDTH
823 BOND_AD_SELECT_COUNT
824 )
825
826 var bondAdSelectToString = map[BondAdSelect]string{
827 BOND_AD_SELECT_STABLE: "stable",
828 BOND_AD_SELECT_BANDWIDTH: "bandwidth",
829 BOND_AD_SELECT_COUNT: "count",
830 }
831 var StringToBondAdSelectMap = map[string]BondAdSelect{
832 "stable": BOND_AD_SELECT_STABLE,
833 "bandwidth": BOND_AD_SELECT_BANDWIDTH,
834 "count": BOND_AD_SELECT_COUNT,
835 }
836
837 func (b BondAdSelect) String() string {
838 s, ok := bondAdSelectToString[b]
839 if !ok {
840 return fmt.Sprintf("BondAdSelect(%d)", b)
841 }
842 return s
843 }
844
845
846 type BondAdInfo struct {
847 AggregatorId int
848 NumPorts int
849 ActorKey int
850 PartnerKey int
851 PartnerMac net.HardwareAddr
852 }
853
854
855 type Bond struct {
856 LinkAttrs
857 Mode BondMode
858 ActiveSlave int
859 Miimon int
860 UpDelay int
861 DownDelay int
862 UseCarrier int
863 ArpInterval int
864 ArpIpTargets []net.IP
865 ArpValidate BondArpValidate
866 ArpAllTargets BondArpAllTargets
867 Primary int
868 PrimaryReselect BondPrimaryReselect
869 FailOverMac BondFailOverMac
870 XmitHashPolicy BondXmitHashPolicy
871 ResendIgmp int
872 NumPeerNotif int
873 AllSlavesActive int
874 MinLinks int
875 LpInterval int
876 PacketsPerSlave int
877 LacpRate BondLacpRate
878 AdSelect BondAdSelect
879
880 AdInfo *BondAdInfo
881 AdActorSysPrio int
882 AdUserPortKey int
883 AdActorSystem net.HardwareAddr
884 TlbDynamicLb int
885 }
886
887 func NewLinkBond(atr LinkAttrs) *Bond {
888 return &Bond{
889 LinkAttrs: atr,
890 Mode: -1,
891 ActiveSlave: -1,
892 Miimon: -1,
893 UpDelay: -1,
894 DownDelay: -1,
895 UseCarrier: -1,
896 ArpInterval: -1,
897 ArpIpTargets: nil,
898 ArpValidate: -1,
899 ArpAllTargets: -1,
900 Primary: -1,
901 PrimaryReselect: -1,
902 FailOverMac: -1,
903 XmitHashPolicy: -1,
904 ResendIgmp: -1,
905 NumPeerNotif: -1,
906 AllSlavesActive: -1,
907 MinLinks: -1,
908 LpInterval: -1,
909 PacketsPerSlave: -1,
910 LacpRate: -1,
911 AdSelect: -1,
912 AdActorSysPrio: -1,
913 AdUserPortKey: -1,
914 AdActorSystem: nil,
915 TlbDynamicLb: -1,
916 }
917 }
918
919
920 const (
921 BOND_MODE_MASK uint64 = 1 << (1 + iota)
922 BOND_ACTIVE_SLAVE_MASK
923 BOND_MIIMON_MASK
924 BOND_UPDELAY_MASK
925 BOND_DOWNDELAY_MASK
926 BOND_USE_CARRIER_MASK
927 BOND_ARP_INTERVAL_MASK
928 BOND_ARP_VALIDATE_MASK
929 BOND_ARP_ALL_TARGETS_MASK
930 BOND_PRIMARY_MASK
931 BOND_PRIMARY_RESELECT_MASK
932 BOND_FAIL_OVER_MAC_MASK
933 BOND_XMIT_HASH_POLICY_MASK
934 BOND_RESEND_IGMP_MASK
935 BOND_NUM_PEER_NOTIF_MASK
936 BOND_ALL_SLAVES_ACTIVE_MASK
937 BOND_MIN_LINKS_MASK
938 BOND_LP_INTERVAL_MASK
939 BOND_PACKETS_PER_SLAVE_MASK
940 BOND_LACP_RATE_MASK
941 BOND_AD_SELECT_MASK
942 )
943
944
945 func (bond *Bond) Attrs() *LinkAttrs {
946 return &bond.LinkAttrs
947 }
948
949
950 func (bond *Bond) Type() string {
951 return "bond"
952 }
953
954
955
956 type BondSlaveState uint8
957
958 const (
959
960 BondStateActive BondSlaveState = iota
961
962 BondStateBackup
963 )
964
965 func (s BondSlaveState) String() string {
966 switch s {
967 case BondStateActive:
968 return "ACTIVE"
969 case BondStateBackup:
970 return "BACKUP"
971 default:
972 return strconv.Itoa(int(s))
973 }
974 }
975
976
977
978 type BondSlaveMiiStatus uint8
979
980 const (
981
982 BondLinkUp BondSlaveMiiStatus = iota
983
984 BondLinkFail
985
986 BondLinkDown
987
988 BondLinkBack
989 )
990
991 func (s BondSlaveMiiStatus) String() string {
992 switch s {
993 case BondLinkUp:
994 return "UP"
995 case BondLinkFail:
996 return "GOING_DOWN"
997 case BondLinkDown:
998 return "DOWN"
999 case BondLinkBack:
1000 return "GOING_BACK"
1001 default:
1002 return strconv.Itoa(int(s))
1003 }
1004 }
1005
1006 type BondSlave struct {
1007 State BondSlaveState
1008 MiiStatus BondSlaveMiiStatus
1009 LinkFailureCount uint32
1010 PermHardwareAddr net.HardwareAddr
1011 QueueId uint16
1012 AggregatorId uint16
1013 AdActorOperPortState uint8
1014 AdPartnerOperPortState uint16
1015 }
1016
1017 func (b *BondSlave) SlaveType() string {
1018 return "bond"
1019 }
1020
1021 type VrfSlave struct {
1022 Table uint32
1023 }
1024
1025 func (v *VrfSlave) SlaveType() string {
1026 return "vrf"
1027 }
1028
1029
1030
1031 type Geneve struct {
1032 LinkAttrs
1033 ID uint32
1034 Remote net.IP
1035 Ttl uint8
1036 Tos uint8
1037 Dport uint16
1038 UdpCsum uint8
1039 UdpZeroCsum6Tx uint8
1040 UdpZeroCsum6Rx uint8
1041 Link uint32
1042 FlowBased bool
1043 InnerProtoInherit bool
1044 Df GeneveDf
1045 }
1046
1047 func (geneve *Geneve) Attrs() *LinkAttrs {
1048 return &geneve.LinkAttrs
1049 }
1050
1051 func (geneve *Geneve) Type() string {
1052 return "geneve"
1053 }
1054
1055 type GeneveDf uint8
1056
1057 const (
1058 GENEVE_DF_UNSET GeneveDf = iota
1059 GENEVE_DF_SET
1060 GENEVE_DF_INHERIT
1061 GENEVE_DF_MAX
1062 )
1063
1064
1065 type Gretap struct {
1066 LinkAttrs
1067 IKey uint32
1068 OKey uint32
1069 EncapSport uint16
1070 EncapDport uint16
1071 Local net.IP
1072 Remote net.IP
1073 IFlags uint16
1074 OFlags uint16
1075 PMtuDisc uint8
1076 Ttl uint8
1077 Tos uint8
1078 EncapType uint16
1079 EncapFlags uint16
1080 Link uint32
1081 FlowBased bool
1082 }
1083
1084 func (gretap *Gretap) Attrs() *LinkAttrs {
1085 return &gretap.LinkAttrs
1086 }
1087
1088 func (gretap *Gretap) Type() string {
1089 if gretap.Local.To4() == nil {
1090 return "ip6gretap"
1091 }
1092 return "gretap"
1093 }
1094
1095 type Iptun struct {
1096 LinkAttrs
1097 Ttl uint8
1098 Tos uint8
1099 PMtuDisc uint8
1100 Link uint32
1101 Local net.IP
1102 Remote net.IP
1103 EncapSport uint16
1104 EncapDport uint16
1105 EncapType uint16
1106 EncapFlags uint16
1107 FlowBased bool
1108 Proto uint8
1109 }
1110
1111 func (iptun *Iptun) Attrs() *LinkAttrs {
1112 return &iptun.LinkAttrs
1113 }
1114
1115 func (iptun *Iptun) Type() string {
1116 return "ipip"
1117 }
1118
1119 type Ip6tnl struct {
1120 LinkAttrs
1121 Link uint32
1122 Local net.IP
1123 Remote net.IP
1124 Ttl uint8
1125 Tos uint8
1126 Flags uint32
1127 Proto uint8
1128 FlowInfo uint32
1129 EncapLimit uint8
1130 EncapType uint16
1131 EncapFlags uint16
1132 EncapSport uint16
1133 EncapDport uint16
1134 FlowBased bool
1135 }
1136
1137 func (ip6tnl *Ip6tnl) Attrs() *LinkAttrs {
1138 return &ip6tnl.LinkAttrs
1139 }
1140
1141 func (ip6tnl *Ip6tnl) Type() string {
1142 return "ip6tnl"
1143 }
1144
1145
1146 type TunnelEncapType uint16
1147
1148 const (
1149 None TunnelEncapType = iota
1150 FOU
1151 GUE
1152 )
1153
1154
1155 type TunnelEncapFlag uint16
1156
1157 const (
1158 CSum TunnelEncapFlag = 1 << 0
1159 CSum6 = 1 << 1
1160 RemCSum = 1 << 2
1161 )
1162
1163
1164 type IP6TunnelFlag uint16
1165
1166 const (
1167 IP6_TNL_F_IGN_ENCAP_LIMIT IP6TunnelFlag = 1
1168 IP6_TNL_F_USE_ORIG_TCLASS = 2
1169 IP6_TNL_F_USE_ORIG_FLOWLABEL = 4
1170 IP6_TNL_F_MIP6_DEV = 8
1171 IP6_TNL_F_RCV_DSCP_COPY = 10
1172 IP6_TNL_F_USE_ORIG_FWMARK = 20
1173 IP6_TNL_F_ALLOW_LOCAL_REMOTE = 40
1174 )
1175
1176 type Sittun struct {
1177 LinkAttrs
1178 Link uint32
1179 Ttl uint8
1180 Tos uint8
1181 PMtuDisc uint8
1182 Proto uint8
1183 Local net.IP
1184 Remote net.IP
1185 EncapLimit uint8
1186 EncapType uint16
1187 EncapFlags uint16
1188 EncapSport uint16
1189 EncapDport uint16
1190 }
1191
1192 func (sittun *Sittun) Attrs() *LinkAttrs {
1193 return &sittun.LinkAttrs
1194 }
1195
1196 func (sittun *Sittun) Type() string {
1197 return "sit"
1198 }
1199
1200 type Vti struct {
1201 LinkAttrs
1202 IKey uint32
1203 OKey uint32
1204 Link uint32
1205 Local net.IP
1206 Remote net.IP
1207 }
1208
1209 func (vti *Vti) Attrs() *LinkAttrs {
1210 return &vti.LinkAttrs
1211 }
1212
1213 func (vti *Vti) Type() string {
1214 if vti.Local.To4() == nil {
1215 return "vti6"
1216 }
1217 return "vti"
1218 }
1219
1220 type Gretun struct {
1221 LinkAttrs
1222 Link uint32
1223 IFlags uint16
1224 OFlags uint16
1225 IKey uint32
1226 OKey uint32
1227 Local net.IP
1228 Remote net.IP
1229 Ttl uint8
1230 Tos uint8
1231 PMtuDisc uint8
1232 EncapType uint16
1233 EncapFlags uint16
1234 EncapSport uint16
1235 EncapDport uint16
1236 FlowBased bool
1237 }
1238
1239 func (gretun *Gretun) Attrs() *LinkAttrs {
1240 return &gretun.LinkAttrs
1241 }
1242
1243 func (gretun *Gretun) Type() string {
1244 if gretun.Local.To4() == nil {
1245 return "ip6gre"
1246 }
1247 return "gre"
1248 }
1249
1250 type Vrf struct {
1251 LinkAttrs
1252 Table uint32
1253 }
1254
1255 func (vrf *Vrf) Attrs() *LinkAttrs {
1256 return &vrf.LinkAttrs
1257 }
1258
1259 func (vrf *Vrf) Type() string {
1260 return "vrf"
1261 }
1262
1263 type GTP struct {
1264 LinkAttrs
1265 FD0 int
1266 FD1 int
1267 Role int
1268 PDPHashsize int
1269 }
1270
1271 func (gtp *GTP) Attrs() *LinkAttrs {
1272 return >p.LinkAttrs
1273 }
1274
1275 func (gtp *GTP) Type() string {
1276 return "gtp"
1277 }
1278
1279
1280
1281
1282 type Xfrmi struct {
1283 LinkAttrs
1284 Ifid uint32
1285 }
1286
1287 func (xfrm *Xfrmi) Attrs() *LinkAttrs {
1288 return &xfrm.LinkAttrs
1289 }
1290
1291 func (xfrm *Xfrmi) Type() string {
1292 return "xfrm"
1293 }
1294
1295
1296
1297 type IPoIBMode uint16
1298
1299 func (m *IPoIBMode) String() string {
1300 str, ok := iPoIBModeToString[*m]
1301 if !ok {
1302 return fmt.Sprintf("mode(%d)", *m)
1303 }
1304 return str
1305 }
1306
1307 const (
1308 IPOIB_MODE_DATAGRAM = iota
1309 IPOIB_MODE_CONNECTED
1310 )
1311
1312 var iPoIBModeToString = map[IPoIBMode]string{
1313 IPOIB_MODE_DATAGRAM: "datagram",
1314 IPOIB_MODE_CONNECTED: "connected",
1315 }
1316
1317 var StringToIPoIBMode = map[string]IPoIBMode{
1318 "datagram": IPOIB_MODE_DATAGRAM,
1319 "connected": IPOIB_MODE_CONNECTED,
1320 }
1321
1322 const (
1323 CAN_STATE_ERROR_ACTIVE = iota
1324 CAN_STATE_ERROR_WARNING
1325 CAN_STATE_ERROR_PASSIVE
1326 CAN_STATE_BUS_OFF
1327 CAN_STATE_STOPPED
1328 CAN_STATE_SLEEPING
1329 )
1330
1331 type Can struct {
1332 LinkAttrs
1333
1334 BitRate uint32
1335 SamplePoint uint32
1336 TimeQuanta uint32
1337 PropagationSegment uint32
1338 PhaseSegment1 uint32
1339 PhaseSegment2 uint32
1340 SyncJumpWidth uint32
1341 BitRatePreScaler uint32
1342
1343 Name string
1344 TimeSegment1Min uint32
1345 TimeSegment1Max uint32
1346 TimeSegment2Min uint32
1347 TimeSegment2Max uint32
1348 SyncJumpWidthMax uint32
1349 BitRatePreScalerMin uint32
1350 BitRatePreScalerMax uint32
1351 BitRatePreScalerInc uint32
1352
1353 ClockFrequency uint32
1354
1355 State uint32
1356
1357 Mask uint32
1358 Flags uint32
1359
1360 TxError uint16
1361 RxError uint16
1362
1363 RestartMs uint32
1364 }
1365
1366 func (can *Can) Attrs() *LinkAttrs {
1367 return &can.LinkAttrs
1368 }
1369
1370 func (can *Can) Type() string {
1371 return "can"
1372 }
1373
1374 type IPoIB struct {
1375 LinkAttrs
1376 Pkey uint16
1377 Mode IPoIBMode
1378 Umcast uint16
1379 }
1380
1381 func (ipoib *IPoIB) Attrs() *LinkAttrs {
1382 return &ipoib.LinkAttrs
1383 }
1384
1385 func (ipoib *IPoIB) Type() string {
1386 return "ipoib"
1387 }
1388
1389 type BareUDP struct {
1390 LinkAttrs
1391 Port uint16
1392 EtherType uint16
1393 SrcPortMin uint16
1394 MultiProto bool
1395 }
1396
1397 func (bareudp *BareUDP) Attrs() *LinkAttrs {
1398 return &bareudp.LinkAttrs
1399 }
1400
1401 func (bareudp *BareUDP) Type() string {
1402 return "bareudp"
1403 }
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415 type LinkNotFoundError struct {
1416 error
1417 }
1418
View as plain text