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 02e9fa9 commit d2cc56e
Show file tree
Hide file tree
Showing 17 changed files with 1,119 additions and 68 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
109 changes: 109 additions & 0 deletions apis/v1alpha1/tcxProgram_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/*
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"

// TCXBefore TCX program will be before a specific TCX program
TCXBefore TCXPositionType = "Before"

// TCXAfter TCX program will be after a specific TCX program
TCXAfter TCXPositionType = "After"
)

// 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"`

// TargetProgramName defined the existing TCX program that will be used in case we need set this TCX program
// priority against.
//+optional
TargetProgramName string `json:"targetprogramname,omitempty"`

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

// ExpectedRevision Attach TCX hook only if the expected revision matches.
//+optional
ExpectedRevision uint64 `json:"expectedRevision,omitempty"`
}

// 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.

53 changes: 20 additions & 33 deletions bundle/manifests/bpfman.io_bpfapplications.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -584,12 +584,17 @@ 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
- egress
type: string
expectedRevision:
description: ExpectedRevision Attach TCX hook only if the
expected revision matches.
format: int64
type: integer
interfaceselector:
description: Selector to determine the network interface
(or interfaces)
Expand Down Expand Up @@ -658,43 +663,25 @@ 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
position:
default: Last
description: Position defines the order of the TCX relative
to other TCX attached to the same interface
enum:
- First
- Last
- Before
- After
type: string
targetprogramname:
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
TargetProgramName defined the existing TCX program that will be used in case we need set this TCX program
priority against.
type: string
required:
- bpffunctionname
- direction
- interfaceselector
- priority
type: object
tracepoint:
description: tracepoint defines the desired state of the application's
Expand Down
Loading

0 comments on commit d2cc56e

Please sign in to comment.