Skip to content

Commit

Permalink
Merge pull request #14 from nik-netlox/main
Browse files Browse the repository at this point in the history
Associate service name with LB rule and connection entries
  • Loading branch information
UltraInstinct14 authored Nov 3, 2023
2 parents 9ee2379 + 620bb17 commit 9eb6a09
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 13 deletions.
6 changes: 5 additions & 1 deletion cmd/create/create_loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ type CreateLoadBalancerOptions struct {
Endpoints []string
SecIPs []string
Select string
Name string
}

type CreateLoadBalancerResult struct {
Expand Down Expand Up @@ -104,7 +105,7 @@ func NewCreateLoadBalancerCmd(restOptions *api.RESTOptions) *cobra.Command {
o := CreateLoadBalancerOptions{}

var createLbCmd = &cobra.Command{
Use: "lb IP [--select=<rr|hash|priority>] [--tcp=<port>:<targetPort>] [--udp=<port>:<targetPort>] [--sctp=<port>:<targetPort>] [--icmp] [--mark=<val>] [--secips=<ip>,][--endpoints=<ip>:<weight>,] [--mode=<onearm|fullnat>] [--bgp] [--monitor] [--inatimeout=<to>]",
Use: "lb IP [--select=<rr|hash|priority>] [--tcp=<port>:<targetPort>] [--udp=<port>:<targetPort>] [--sctp=<port>:<targetPort>] [--icmp] [--mark=<val>] [--secips=<ip>,][--endpoints=<ip>:<weight>,] [--mode=<onearm|fullnat>] [--bgp] [--monitor] [--inatimeout=<to>] [--name=<service-name>]",
Short: "Create a LoadBalancer",
Long: `Create a LoadBalancer
Expand All @@ -117,6 +118,7 @@ func NewCreateLoadBalancerCmd(restOptions *api.RESTOptions) *cobra.Command {
fullnat - LB put Service IP as scrIP
ex) loxicmd create lb 192.168.0.200 --tcp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1
loxicmd create lb 192.168.0.200 --tcp=80:32015 --name="http-service" --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1
loxicmd create lb 192.168.0.200 --udp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1 --mark=10
loxicmd create lb 192.168.0.200 --tcp=80:32015 --udp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1
loxicmd create lb 192.168.0.200 --select=hash --tcp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1
Expand Down Expand Up @@ -185,6 +187,7 @@ ex) loxicmd create lb 192.168.0.200 --tcp=80:32015 --endpoints=10.212.0.1:1,10.2
Mode: api.LbMode(ModeToNum(o.Mode)),
Timeout: o.Timeout,
Block: o.Mark,
Name: o.Name,
}

if o.Mode == "dsr" && targetPort != port {
Expand Down Expand Up @@ -240,6 +243,7 @@ ex) loxicmd create lb 192.168.0.200 --tcp=80:32015 --endpoints=10.212.0.1:1,10.2
createLbCmd.Flags().Uint32VarP(&o.Timeout, "inatimeout", "", 0, "Specify the timeout (in seconds) after which a LB session will be reset for inactivity")
createLbCmd.Flags().Uint16VarP(&o.Mark, "mark", "", 0, "Specify the mark num to segregate a load-balancer VIP service")
createLbCmd.Flags().StringSliceVar(&o.Endpoints, "endpoints", o.Endpoints, "Endpoints is pairs that can be specified as '<endpointIP>:<Weight>'")
createLbCmd.Flags().StringVarP(&o.Name, "name", "", o.Name, "Name for load balancer rule")

return createLbCmd
}
Expand Down
12 changes: 8 additions & 4 deletions cmd/get/get_conntrack.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func NewGetConntrackCmd(restOptions *api.RESTOptions) *cobra.Command {

},
}

GetctCmd.Flags().StringVarP(&restOptions.ServiceName, "servName", "", restOptions.ServiceName, "Name for load balancer rule")
return GetctCmd
}

Expand Down Expand Up @@ -84,17 +84,21 @@ func PrintGetCTResult(resp *http.Response, o api.RESTOptions) {

// Table Init
table := TableInit()
table.SetHeader([]string{"destIP", "srcIP", "dport", "sport", "proto", "state", "act", "packets", "bytes"})
table.SetHeader([]string{"Service Name","destIP", "srcIP", "dport", "sport", "proto", "state", "act", "packets", "bytes"})
// Making load balance data
data = makeConntrackData(ctresp)
data = makeConntrackData(o, ctresp)

// Rendering the load balance data to table
TableShow(data, table)
}

func makeConntrackData(ctresp api.CtInformationGet) (data [][]string) {
func makeConntrackData(o api.RESTOptions,ctresp api.CtInformationGet) (data [][]string) {
for _, conntrack := range ctresp.CtInfo {
if o.ServiceName != "" && o.ServiceName != conntrack.ServName {
continue
}
data = append(data, []string{
conntrack.ServName,
conntrack.Dip,
conntrack.Sip,
fmt.Sprintf("%d", conntrack.Dport),
Expand Down
15 changes: 9 additions & 6 deletions cmd/get/get_loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func NewGetLoadBalancerCmd(restOptions *api.RESTOptions) *cobra.Command {

},
}

GetLbCmd.Flags().StringVarP(&restOptions.ServiceName, "servName", "", restOptions.ServiceName, "Name for load balancer rule")
return GetLbCmd
}

Expand Down Expand Up @@ -133,6 +133,9 @@ func PrintGetLbResult(resp *http.Response, o api.RESTOptions) {

// Making load balance data
for _, lbrule := range lbresp.LbRules {
if o.ServiceName != "" && o.ServiceName != lbrule.Service.Name {
continue
}
if o.PrintOption == "wide" {
table.SetHeader(LOADBALANCER_WIDE_TITLE)
secIPs = ""
Expand All @@ -146,25 +149,25 @@ func PrintGetLbResult(resp *http.Response, o api.RESTOptions) {
if lbrule.Service.Monitor {
for i, eps := range lbrule.Endpoints {
if i == 0 {
data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)),
data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, lbrule.Service.Name, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)),
eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), eps.State, eps.Counter})
} else {
data = append(data, []string{"", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), eps.State, eps.Counter})
data = append(data, []string{"", "", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), eps.State, eps.Counter})
}
}
} else {
for i, eps := range lbrule.Endpoints {
if i == 0 {
data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)),
data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, lbrule.Service.Name, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)),
eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), "-", eps.Counter})
} else {
data = append(data, []string{"", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), "-", eps.Counter})
data = append(data, []string{"", "", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), "-", eps.Counter})
}
}
}
} else {
table.SetHeader(LOADBALANCER_TITLE)
data = append(data, []string{lbrule.Service.ExternalIP, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), fmt.Sprintf("%d", len(lbrule.Endpoints)), BoolToMon(lbrule.Service.Monitor)})
data = append(data, []string{lbrule.Service.ExternalIP, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, lbrule.Service.Name, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), fmt.Sprintf("%d", len(lbrule.Endpoints)), BoolToMon(lbrule.Service.Monitor)})
}
}

Expand Down
4 changes: 2 additions & 2 deletions cmd/get/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ package get

var (
CONNTRACK_TITLE = []string{"destIP", "srcIP", "dPort", "sPort", "proto", "state", "act", "packets", "bytes"}
LOADBALANCER_TITLE = []string{"Ext IP", "Port", "Proto", "Mark", "Sel", "Mode", "# of Endpoints", "Monitor"}
LOADBALANCER_WIDE_TITLE = []string{"Ext IP", "Sec IPs", "Port", "Proto", "Mark", "Sel", "Mode", "Endpoint", "EPort", "Weight", "State", "Counters"}
LOADBALANCER_TITLE = []string{"Ext IP", "Port", "Proto", "Name", "Mark", "Sel", "Mode", "# of Endpoints", "Monitor"}
LOADBALANCER_WIDE_TITLE = []string{"Ext IP", "Sec IPs", "Port", "Proto", "Name", "Mark", "Sel", "Mode", "Endpoint", "EPort", "Weight", "State", "Counters"}
SESSION_TITLE = []string{"ident", "session IP"}
SESSION_WIDE_TITLE = []string{"ident", "session IP", "access Network Tunnel", "core Network Tunnel"}
PORT_WIDE_TITLE = []string{"index", "portname", "MAC", "link/state", "mtu", "isActive/bpf\nPort type", "Statistics", "L3Info", "L2Info", "Sync"}
Expand Down
1 change: 1 addition & 0 deletions pkg/api/conntrack.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ type ConntrackInformation struct {
CAct string `json:"conntrackAct"`
Pkts uint64 `json:"packets"`
Bytes uint64 `json:"bytes"`
ServName string `json:"servName"`
}

func (ct ConntrackInformation) Key() string {
Expand Down
1 change: 1 addition & 0 deletions pkg/api/loadBalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type LoadBalancerService struct {
Timeout uint32 `json:"inactiveTimeOut" yaml:"inactiveTimeOut"`
Block uint16 `json:"block" yaml:"block"`
Managed bool `json:"managed,omitempty" yaml:"managed"`
Name string `json:"name,omitempty" yaml:"name"`
}

type LoadBalancerEndpoint struct {
Expand Down
1 change: 1 addition & 0 deletions pkg/api/rest.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ type RESTOptions struct {
ServerIP string
ServerPort int16
Timeout int16
ServiceName string
}

type RESTClient struct {
Expand Down

0 comments on commit 9eb6a09

Please sign in to comment.