...

Source file src/edge-infra.dev/pkg/lib/kernel/netlink/tc/attrs.go

Documentation: edge-infra.dev/pkg/lib/kernel/netlink/tc

     1  //go:build linux
     2  
     3  package tc
     4  
     5  import "github.com/vishvananda/netlink"
     6  
     7  type Attrs struct {
     8  	linkIndex int
     9  	handle    uint32
    10  	parent    uint32
    11  }
    12  
    13  type FilterAttrs struct {
    14  	Attrs
    15  	priority uint16
    16  	protocol uint16
    17  }
    18  
    19  func NewFilterAttrs() *FilterAttrs {
    20  	return &FilterAttrs{Attrs: Attrs{}}
    21  }
    22  
    23  func (fa *FilterAttrs) WithPriority(priority uint16) *FilterAttrs {
    24  	fa.priority = priority
    25  	return fa
    26  }
    27  
    28  func (fa *FilterAttrs) WithProtocol(protocol uint16) *FilterAttrs {
    29  	fa.protocol = protocol
    30  	return fa
    31  }
    32  
    33  func (fa *FilterAttrs) WithLinkIndex(linkIndex int) *FilterAttrs {
    34  	fa.linkIndex = linkIndex
    35  	return fa
    36  }
    37  
    38  func (fa *FilterAttrs) WithHandle(handle uint32) *FilterAttrs {
    39  	fa.handle = handle
    40  	return fa
    41  }
    42  
    43  func (fa *FilterAttrs) WithParent(parent uint32) *FilterAttrs {
    44  	fa.parent = parent
    45  	return fa
    46  }
    47  
    48  func (fa *FilterAttrs) WithMakeHandle(major, minor uint16) *FilterAttrs {
    49  	fa.handle = netlink.MakeHandle(major, minor)
    50  	return fa
    51  }
    52  
    53  func (fa *FilterAttrs) WithMakeParent(major, minor uint16) *FilterAttrs {
    54  	fa.parent = netlink.MakeHandle(major, minor)
    55  	return fa
    56  }
    57  
    58  func (fa *FilterAttrs) Build() netlink.FilterAttrs {
    59  	filterAttrs := netlink.FilterAttrs{
    60  		LinkIndex: fa.Attrs.linkIndex,
    61  		Parent:    fa.Attrs.parent,
    62  		Handle:    fa.Attrs.handle,
    63  	}
    64  	filterAttrs.Priority = fa.priority
    65  	filterAttrs.Protocol = fa.protocol
    66  	return filterAttrs
    67  }
    68  
    69  type ActionAttrs struct {
    70  	Attrs
    71  	action netlink.TcAct
    72  }
    73  
    74  func NewActionAttrs() *ActionAttrs {
    75  	return &ActionAttrs{Attrs: Attrs{}}
    76  }
    77  
    78  func (aa *ActionAttrs) WithAction(action netlink.TcAct) *ActionAttrs {
    79  	aa.action = action
    80  	return aa
    81  }
    82  
    83  func (aa *ActionAttrs) Build() netlink.ActionAttrs {
    84  	actionAttrs := netlink.ActionAttrs{
    85  		Action: aa.action,
    86  	}
    87  	return actionAttrs
    88  }
    89  
    90  type QdiscAttrs struct {
    91  	Attrs
    92  }
    93  
    94  func NewQdiscAttrs() *QdiscAttrs {
    95  	return &QdiscAttrs{Attrs: Attrs{}}
    96  }
    97  
    98  func (qa *QdiscAttrs) WithLinkIndex(linkIndex int) *QdiscAttrs {
    99  	qa.linkIndex = linkIndex
   100  	return qa
   101  }
   102  
   103  func (qa *QdiscAttrs) WithHandle(handle uint32) *QdiscAttrs {
   104  	qa.handle = handle
   105  	return qa
   106  }
   107  
   108  func (qa *QdiscAttrs) WithParent(parent uint32) *QdiscAttrs {
   109  	qa.parent = parent
   110  	return qa
   111  }
   112  
   113  func (qa *QdiscAttrs) WithMakeHandle(major, minor uint16) *QdiscAttrs {
   114  	qa.handle = netlink.MakeHandle(major, minor)
   115  	return qa
   116  }
   117  
   118  func (qa *QdiscAttrs) WithMakeParent(major, minor uint16) *QdiscAttrs {
   119  	qa.parent = netlink.MakeHandle(major, minor)
   120  	return qa
   121  }
   122  
   123  func (qa *QdiscAttrs) Build() netlink.QdiscAttrs {
   124  	qdiscAttrs := netlink.QdiscAttrs{
   125  		LinkIndex: qa.linkIndex,
   126  		Parent:    qa.parent,
   127  		Handle:    qa.handle,
   128  	}
   129  	return qdiscAttrs
   130  }
   131  
   132  type ClassAttrs struct {
   133  	Attrs
   134  }
   135  
   136  func NewClassAttrs() *ClassAttrs {
   137  	return &ClassAttrs{}
   138  }
   139  
   140  func (ca *ClassAttrs) WithLinkIndex(linkIndex int) *ClassAttrs {
   141  	ca.linkIndex = linkIndex
   142  	return ca
   143  }
   144  
   145  func (ca *ClassAttrs) WithHandle(handle uint32) *ClassAttrs {
   146  	ca.handle = handle
   147  	return ca
   148  }
   149  
   150  func (ca *ClassAttrs) WithParent(parent uint32) *ClassAttrs {
   151  	ca.parent = parent
   152  	return ca
   153  }
   154  
   155  func (ca *ClassAttrs) WithMakeHandle(major, minor uint16) *ClassAttrs {
   156  	ca.handle = netlink.MakeHandle(major, minor)
   157  	return ca
   158  }
   159  
   160  func (ca *ClassAttrs) WithMakeParent(major, minor uint16) *ClassAttrs {
   161  	ca.parent = netlink.MakeHandle(major, minor)
   162  	return ca
   163  }
   164  
   165  func (ca *ClassAttrs) Build() netlink.ClassAttrs {
   166  	classAttrs := netlink.ClassAttrs{
   167  		LinkIndex: ca.linkIndex,
   168  		Parent:    ca.parent,
   169  		Handle:    ca.handle,
   170  	}
   171  	return classAttrs
   172  }
   173  

View as plain text