Skip to content

Commit

Permalink
WIP: initial APIS for TCX ebpf program types
Browse files Browse the repository at this point in the history
Signed-off-by: Mohamed Mahmoud <mmahmoud@redhat.com>
  • Loading branch information
msherif1234 committed Aug 13, 2024
1 parent 3690aa9 commit bf67bcb
Show file tree
Hide file tree
Showing 17 changed files with 1,072 additions and 70 deletions.
2 changes: 1 addition & 1 deletion apis/v1alpha1/bpfapplication_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ type BpfApplicationProgram struct {
// tcx defines the desired state of the application's TcPrograms.
// +unionMember
// +optional
TCX *TcProgramInfo `json:"tcx,omitempty"`
TCX *TcxProgramInfo `json:"tcx,omitempty"`

// fentry defines the desired state of the application's FentryPrograms.
// +unionMember
Expand Down
93 changes: 93 additions & 0 deletions apis/v1alpha1/tcxProgram_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
Copyright 2024.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// All fields are required unless explicitly marked optional
// +kubebuilder:validation:Required
package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// +genclient
// +genclient:nonNamespaced
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//+kubebuilder:resource:scope=Cluster

// TcxProgram is the Schema for the TcxProgram API
// +kubebuilder:printcolumn:name="BpfFunctionName",type=string,JSONPath=`.spec.bpffunctionname`
// +kubebuilder:printcolumn:name="NodeSelector",type=string,JSONPath=`.spec.nodeselector`
// +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.conditions[0].reason`
// +kubebuilder:printcolumn:name="Direction",type=string,JSONPath=`.spec.direction`,priority=1
// +kubebuilder:printcolumn:name="InterfaceSelector",type=string,JSONPath=`.spec.interfaceselector`,priority=1
// +kubebuilder:printcolumn:name="Position",type=string,JSONPath=`.spec.position`,priority=1
type TcxProgram struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec TcxProgramSpec `json:"spec"`
// +optional
Status TcxProgramStatus `json:"status,omitempty"`
}

// TcxProgramSpec defines the desired state of TcxProgram
type TcxProgramSpec struct {
TcxProgramInfo `json:",inline"`
BpfAppCommon `json:",inline"`
}

// TCXPositionType defines the TCX position string
type TCXPositionType string

const (
// TCXFirst TCX program will be the first program to execute.
TCXFirst TCXPositionType = "First"

// TCXLast TCX program will be the last program to execute.
TCXLast TCXPositionType = "Last"
)

// TcxProgramInfo defines the tc program details
type TcxProgramInfo struct {
BpfProgramCommon `json:",inline"`

// Selector to determine the network interface (or interfaces)
InterfaceSelector InterfaceSelector `json:"interfaceselector"`

// Direction specifies the direction of traffic the tcx program should
// attach to for a given network device.
// +kubebuilder:validation:Enum=ingress;egress
Direction string `json:"direction"`

// Anchor defines the order of the TCX relative to other TCX attached to the same interface
// +kubebuilder:validation:Enum:="First";"Last"
//+kubebuilder:default:=Last
Position TCXPositionType `json:"position"`
}

// TcxProgramStatus defines the observed state of TcProgram
type TcxProgramStatus struct {
BpfProgramStatusCommon `json:",inline"`
}

// +kubebuilder:object:root=true
// TcxProgramList contains a list of TcxPrograms
type TcxProgramList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []TcxProgram `json:"items"`
}
111 changes: 110 additions & 1 deletion apis/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions apis/v1alpha1/zz_generated.register.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 10 additions & 34 deletions bundle/manifests/bpfman.io_bpfapplications.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,7 @@ spec:
type: string
direction:
description: |-
Direction specifies the direction of traffic the tc program should
Direction specifies the direction of traffic the tcx program should
attach to for a given network device.
enum:
- ingress
Expand Down Expand Up @@ -658,43 +658,19 @@ spec:
type: object
type: object
x-kubernetes-map-type: atomic
priority:
description: |-
Priority specifies the priority of the tc program in relation to
other programs of the same type with the same attach point. It is a value
from 0 to 1000 where lower values have higher precedence.
format: int32
maximum: 1000
minimum: 0
type: integer
proceedon:
default:
- pipe
- dispatcher_return
description: |-
ProceedOn allows the user to call other tc programs in chain on this exit code.
Multiple values are supported by repeating the parameter.
items:
enum:
- unspec
- ok
- reclassify
- shot
- pipe
- stolen
- queued
- repeat
- redirect
- trap
- dispatcher_return
type: string
maxItems: 11
type: array
position:
default: Last
description: Anchor defines the order of the TCX relative
to other TCX attached to the same interface
enum:
- First
- Last
type: string
required:
- bpffunctionname
- direction
- interfaceselector
- priority
- position
type: object
tracepoint:
description: tracepoint defines the desired state of the application's
Expand Down
44 changes: 10 additions & 34 deletions config/crd/bases/bpfman.io_bpfapplications.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,7 @@ spec:
type: string
direction:
description: |-
Direction specifies the direction of traffic the tc program should
Direction specifies the direction of traffic the tcx program should
attach to for a given network device.
enum:
- ingress
Expand Down Expand Up @@ -658,43 +658,19 @@ spec:
type: object
type: object
x-kubernetes-map-type: atomic
priority:
description: |-
Priority specifies the priority of the tc program in relation to
other programs of the same type with the same attach point. It is a value
from 0 to 1000 where lower values have higher precedence.
format: int32
maximum: 1000
minimum: 0
type: integer
proceedon:
default:
- pipe
- dispatcher_return
description: |-
ProceedOn allows the user to call other tc programs in chain on this exit code.
Multiple values are supported by repeating the parameter.
items:
enum:
- unspec
- ok
- reclassify
- shot
- pipe
- stolen
- queued
- repeat
- redirect
- trap
- dispatcher_return
type: string
maxItems: 11
type: array
position:
default: Last
description: Anchor defines the order of the TCX relative
to other TCX attached to the same interface
enum:
- First
- Last
type: string
required:
- bpffunctionname
- direction
- interfaceselector
- priority
- position
type: object
tracepoint:
description: tracepoint defines the desired state of the application's
Expand Down
Loading

0 comments on commit bf67bcb

Please sign in to comment.