Skip to content

Commit 1351139

Browse files
committed
working on vpn rpc
Signed-off-by: Serguei Bezverkhi <[email protected]>
1 parent 876d9c5 commit 1351139

File tree

5 files changed

+51
-14
lines changed

5 files changed

+51
-14
lines changed

cmd/gateway-client/jalapeno-client.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"flag"
56
"fmt"
67
"io"
78
"math/rand"
@@ -23,6 +24,9 @@ const (
2324
)
2425

2526
func main() {
27+
flag.Parse()
28+
flag.Set("logtostderr", "true")
29+
2630
client := os.Getenv("CLIENT_IP")
2731
if client == "" {
2832
glog.Errorf("env variable \"CLIENT_IP\" is not defined, cannor proceed further, exiting...")
@@ -37,7 +41,7 @@ func main() {
3741
Addr: &net.IPAddr{
3842
IP: net.ParseIP(client),
3943
}})
40-
conn, err := grpc.DialContext(ctx, jalapenoGateway)
44+
conn, err := grpc.DialContext(ctx, jalapenoGateway, grpc.WithInsecure())
4145
if err != nil {
4246
glog.Errorf("failed to connect to Jalapeno Gateway at the address: %s with error: %+v", jalapenoGateway, err)
4347
os.Exit(1)
@@ -72,17 +76,19 @@ func main() {
7276
i := rand.Intn(3)
7377
stream, err := gwclient.VPN(ctx, requests[i])
7478
if err != nil {
75-
glog.Errorf("failed to request VPN label for request %+v with error: %+v", requests[i])
76-
}
77-
for {
78-
entry, err := stream.Recv()
79-
if err == io.EOF {
80-
break
81-
}
82-
if err != nil {
83-
glog.Errorf("failed to receive a message from the stream with error: %+v", err)
79+
glog.Errorf("failed to request VPN label for request %+v with error: %+v", requests[i], err)
80+
} else {
81+
for {
82+
entry, err := stream.Recv()
83+
if err == io.EOF {
84+
break
85+
}
86+
if err != nil {
87+
glog.Errorf("failed to receive a message from the stream with error: %+v", err)
88+
break
89+
}
90+
fmt.Printf("Received message: %+v\n", *entry)
8491
}
85-
fmt.Printf("Received message: %+v\n", *entry)
8692
}
8793
select {
8894
case <-ticker.C:

deployment/jalapeno-client.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ spec:
1515
spec:
1616
containers:
1717
- name: jalapeno-client
18-
image: 192.168.80.240:4000/jalapeno-client/jalapeno-client:0.0.0
18+
image: docker.io/sbezverk/jalapeno-client:0.0.0
1919
imagePullPolicy: Always
2020
env:
2121
- name: CLIENT_IP

deployment/jalapeno-gateway.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ spec:
3939
spec:
4040
containers:
4141
- name: jalapeno-gateway
42-
image: 192.168.80.240:4000/jalapeno-gateway/jalapeno-gateway-debug:0.0.0
42+
image: docker.io/sbezverk/jalapeno-gateway-debug:0.0.0
4343
imagePullPolicy: Always
4444
ports:
4545
- containerPort: 40040

pkg/dbclient/mock/dbmock.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ var (
1919
type dbMock struct {
2020
mu sync.Mutex
2121
qoe map[int32]*pbapi.Qoe
22-
vpn map[pbapi.RouteDistinguisherType]map[uint32][]uint32
2322
}
2423

2524
// GetQoE is required method by DB interface, it takes requested QoE and searches through

pkg/gateway/server.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package gateway
22

33
import (
44
"context"
5+
"fmt"
56
"net"
67
"time"
78

89
pbapi "github.com/cisco-ie/jalapeno-go-gateway/pkg/apis"
910
"github.com/cisco-ie/jalapeno-go-gateway/pkg/bgpclient"
1011
"github.com/cisco-ie/jalapeno-go-gateway/pkg/dbclient"
1112
"github.com/golang/glog"
13+
"github.com/golang/protobuf/ptypes"
1214
"google.golang.org/grpc"
1315
"google.golang.org/grpc/peer"
1416
)
@@ -42,6 +44,36 @@ func (g *gateway) Stop() {
4244
}
4345

4446
func (g *gateway) VPN(reqVPN *pbapi.RequestVPN, stream pbapi.GatewayService_VPNServer) error {
47+
var rdValue ptypes.DynamicAny
48+
if err := ptypes.UnmarshalAny(reqVPN.Rd, &rdValue); err != nil {
49+
return fmt.Errorf("failed to unmarshal route distinguisher with error: %+v", err)
50+
}
51+
rd := "RD: "
52+
switch v := rdValue.Message.(type) {
53+
case *pbapi.RouteDistinguisherTwoOctetAS:
54+
rd = fmt.Sprintf("%d:%d ", uint16(v.Admin), v.Assigned)
55+
case *pbapi.RouteDistinguisherIPAddress:
56+
rd = fmt.Sprintf("%s:%d ", v.Admin, uint16(v.Assigned))
57+
case *pbapi.RouteDistinguisherFourOctetAS:
58+
rd = fmt.Sprintf("%d:%d ", v.Admin, uint16(v.Assigned))
59+
}
60+
var rt string
61+
for i := 0; i < len(reqVPN.Rt); i++ {
62+
var rtValue ptypes.DynamicAny
63+
if err := ptypes.UnmarshalAny(reqVPN.Rt[i], &rtValue); err != nil {
64+
return fmt.Errorf("failed to unmarshal route target with error: %+v", err)
65+
}
66+
rt += "RT: "
67+
switch v := rtValue.Message.(type) {
68+
case *pbapi.TwoOctetAsSpecificExtended:
69+
rt += fmt.Sprintf("Subtype:%d 2 bytes AS:%d LocalAdmin:%d Transitive:%t", v.SubType, uint16(v.As), v.LocalAdmin, v.IsTransitive)
70+
case *pbapi.IPv4AddressSpecificExtended:
71+
rt += fmt.Sprintf("Subtype:%d Address:%d LocalAdmin:%d Transitive:%t", v.SubType, v.Address, uint16(v.LocalAdmin), v.IsTransitive)
72+
case *pbapi.FourOctetAsSpecificExtended:
73+
rt += fmt.Sprintf("Subtype:%d 4 bytes AS:%d LocalAdmin:%d Transitive:%t", v.SubType, v.As, uint16(v.LocalAdmin), v.IsTransitive)
74+
}
75+
}
76+
glog.Infof("Request for VPN with %s %s", rd, rt)
4577
if err := stream.Send(&pbapi.ResponseVPNEntry{}); err != nil {
4678
return err
4779
}

0 commit comments

Comments
 (0)