blob: af87ec7283761d41f1d3ac78fb7d1d044bdc411b [file] [log] [blame]
Author Namea594e632018-08-10 11:33:58 -04001/*
2 Copyright 2017 the original author or authors.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17package main
18
19import (
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040020 "context"
21 "flag"
22 "fmt"
Author Namea594e632018-08-10 11:33:58 -040023 "log"
Author Namea594e632018-08-10 11:33:58 -040024 "runtime/debug"
donNewtonAlphab3279ea2018-09-18 15:55:32 -040025 "strings"
Author Namea594e632018-08-10 11:33:58 -040026
27 "gerrit.opencord.org/abstract-olt/api"
Author Namea594e632018-08-10 11:33:58 -040028 "google.golang.org/grpc"
29 "google.golang.org/grpc/credentials"
30)
31
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040032func main() {
donNewtonAlphab3279ea2018-09-18 15:55:32 -040033 echo := flag.Bool("e", false, "echo")
34 message := flag.String("message", "ping", "message to be echoed back")
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040035 create := flag.Bool("c", false, "create?")
36 addOlt := flag.Bool("s", false, "addOlt?")
37 provOnt := flag.Bool("o", false, "provisionOnt?")
38 clli := flag.String("clli", "", "clli of abstract chassis")
39 xosAddress := flag.String("xos_address", "", "xos address")
40 xosPort := flag.Uint("xos_port", 0, "xos port")
41 rack := flag.Uint("rack", 1, "rack number for chassis")
42 shelf := flag.Uint("shelf", 1, "shelf number for chassis")
43 oltAddress := flag.String("olt_address", "", "ip address for olt chassis")
44 oltPort := flag.Uint("olt_port", 0, "listen port for olt chassis")
45 name := flag.String("name", "", "friendly name for olt chassis")
46 driver := flag.String("driver", "", "driver to use with olt chassis")
47 oltType := flag.String("type", "", "olt chassis type")
48 slot := flag.Uint("slot", 1, "slot number 1-16 to provision ont to")
49 port := flag.Uint("port", 1, "port number 1-16 to provision ont to")
50 ont := flag.Uint("ont", 1, "ont number 1-64")
51 serial := flag.String("serial", "", "serial number of ont")
donNewtonAlphab3279ea2018-09-18 15:55:32 -040052 useSsl := flag.Bool("ssl", false, "use ssl")
53 useAuth := flag.Bool("auth", false, "use auth")
54 crtFile := flag.String("cert", "cert/server.crt", "Public cert for server to establish tls session")
55 serverAddressPort := flag.String("server", "localhost:7777", "address and port of AbstractOLT server")
56 fqdn := flag.String("fqdn", "", "FQDN of the service to match what is in server.crt")
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040057
58 flag.Parse()
donNewtonAlphab3279ea2018-09-18 15:55:32 -040059 if *useSsl {
60 if *fqdn == "" {
61 fqdn = &(strings.Split(*serverAddressPort, ":")[0])
62 fmt.Printf("using %s as the FQDN for the AbstractOLT server", *fqdn)
63 }
64 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040065
donNewtonAlphab3279ea2018-09-18 15:55:32 -040066 if (*echo && *addOlt) || (*echo && *create) || (*echo && *provOnt) || (*create && *addOlt) || (*create && *provOnt) || (*addOlt && *provOnt) {
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040067 fmt.Println("You can only call one method at a time")
68 usage()
69 return
70 }
donNewtonAlphab3279ea2018-09-18 15:55:32 -040071 if !(*create || *provOnt || *addOlt || *echo) {
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040072 fmt.Println("You didn't specify an operation to perform")
73 usage()
74 return
75 }
76 var conn *grpc.ClientConn
donNewtonAlphab3279ea2018-09-18 15:55:32 -040077 var err error
78
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040079 // Setup the login/pass
80 auth := Authentication{
81 Login: "john",
82 Password: "doe",
83 }
donNewtonAlphab3279ea2018-09-18 15:55:32 -040084 if *useSsl && *useAuth {
85
86 creds, err := credentials.NewClientTLSFromFile(*crtFile, *fqdn)
87 conn, err = grpc.Dial(*serverAddressPort, grpc.WithTransportCredentials(creds), grpc.WithPerRPCCredentials(&auth))
88 if err != nil {
89 log.Fatalf("could not load tls cert: %s", err)
90 }
91 } else if *useSsl {
92 creds, err := credentials.NewClientTLSFromFile("cert/server.crt", *fqdn)
93 conn, err = grpc.Dial(*serverAddressPort, grpc.WithTransportCredentials(creds))
94 if err != nil {
95 log.Fatalf("could not load tls cert: %s", err)
96 }
97 } else if *useAuth {
98 conn, err = grpc.Dial(*serverAddressPort, grpc.WithInsecure(), grpc.WithPerRPCCredentials(&auth))
99 } else {
100 conn, err = grpc.Dial(*serverAddressPort, grpc.WithInsecure())
101 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400102 if err != nil {
103 log.Fatalf("did not connect: %s", err)
104 }
105 defer conn.Close()
106
107 c := api.NewAbstractOLTClient(conn)
108 if *create {
109 createChassis(c, clli, xosAddress, xosPort, rack, shelf)
110 } else if *addOlt {
111 addOltChassis(c, clli, oltAddress, oltPort, name, driver, oltType)
112 } else if *provOnt {
113 provisionONT(c, clli, slot, port, ont, serial)
donNewtonAlphab3279ea2018-09-18 15:55:32 -0400114 } else if *echo {
115 ping(c, *message)
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400116 }
117
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400118}
119
Author Namea594e632018-08-10 11:33:58 -0400120// Authentication holds the login/password
121type Authentication struct {
122 Login string
123 Password string
124}
125
126// GetRequestMetadata gets the current request metadata
127func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) {
128 return map[string]string{
129 "login": a.Login,
130 "password": a.Password,
131 }, nil
132}
133
134// RequireTransportSecurity indicates whether the credentials requires transport security
135func (a *Authentication) RequireTransportSecurity() bool {
136 return true
137}
donNewtonAlphab3279ea2018-09-18 15:55:32 -0400138func ping(c api.AbstractOLTClient, message string) error {
139 response, err := c.Echo(context.Background(), &api.EchoMessage{Ping: message})
140 if err != nil {
141 fmt.Printf("Error when calling Echo: %s", err)
142 return err
143 }
144 log.Printf("Response from server: %s", response.GetPong())
145 return nil
146}
Author Namea594e632018-08-10 11:33:58 -0400147
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400148func createChassis(c api.AbstractOLTClient, clli *string, xosAddress *string, xosPort *uint, rack *uint, shelf *uint) error {
149 fmt.Println("Calling Create Chassis")
150 fmt.Println("clli", *clli)
151 fmt.Println("xos_address", *xosAddress)
152 fmt.Println("xos_port", *xosPort)
153 fmt.Println("rack", *rack)
154 fmt.Println("shelf", *shelf)
155 response, err := c.CreateChassis(context.Background(), &api.AddChassisMessage{CLLI: *clli, VCoreIP: *xosAddress, VCorePort: int32(*xosPort), Rack: int32(*rack), Shelf: int32(*shelf)})
Author Namea594e632018-08-10 11:33:58 -0400156 if err != nil {
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400157 fmt.Printf("Error when calling CreateChassis: %s", err)
158 return err
Author Namea594e632018-08-10 11:33:58 -0400159 }
160 log.Printf("Response from server: %s", response.GetDeviceID())
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400161 return nil
162}
163func addOltChassis(c api.AbstractOLTClient, clli *string, oltAddress *string, oltPort *uint, name *string, driver *string, oltType *string) error {
164 fmt.Println("clli", *clli)
165 fmt.Println("olt_address", *oltAddress)
166 fmt.Println("olt_port", *oltPort)
167 fmt.Println("name", *name)
168 fmt.Println("driver", *driver)
169 fmt.Println("type", *oltType)
170 var driverType api.AddOLTChassisMessage_OltDriver
171 var chassisType api.AddOLTChassisMessage_OltType
172 switch *oltType {
173 case "edgecore":
174 chassisType = api.AddOLTChassisMessage_edgecore
175 }
176 switch *driver {
177 case "openolt":
178 driverType = api.AddOLTChassisMessage_openoltDriver
179
180 }
181
182 res, err := c.CreateOLTChassis(context.Background(), &api.AddOLTChassisMessage{CLLI: *clli, SlotIP: *oltAddress, SlotPort: uint32(*oltPort), Hostname: *name, Type: chassisType, Driver: driverType})
Author Namea594e632018-08-10 11:33:58 -0400183 if err != nil {
184 debug.PrintStack()
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400185 fmt.Printf("Error when calling CreateOLTChassis: %s", err)
186 return err
Author Namea594e632018-08-10 11:33:58 -0400187 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400188 log.Printf("Response from server: %s", res.GetDeviceID())
189 return nil
190}
191func provisionONT(c api.AbstractOLTClient, clli *string, slot *uint, port *uint, ont *uint, serial *string) error {
192 fmt.Println("clli", *clli)
193 fmt.Println("slot", *slot)
194 fmt.Println("port", *port)
195 fmt.Println("ont", *ont)
196 fmt.Println("serial", *serial)
197 res, err := c.ProvisionOnt(context.Background(), &api.AddOntMessage{CLLI: *clli, SlotNumber: int32(*slot), PortNumber: int32(*port), OntNumber: int32(*ont), SerialNumber: *serial})
198 if err != nil {
199 debug.PrintStack()
200 fmt.Printf("Error when calling ProvsionOnt %s", err)
201 return err
202 }
203 log.Printf("Response from server: %t", res.GetSuccess())
204 return nil
205
206 return nil
207}
208func usage() {
209 var output = `
donNewtonAlphab3279ea2018-09-18 15:55:32 -0400210 Usage ./client -server=[serverAddress:port] -[methodFlag] params
211 ./client -ssl -fqdn=FQDN_OF_ABSTRACT_OLT_SERVER.CRT -cert PATH_TO_SERVER.CRT -server=[serverAddress:port] -[methodFlag] params : use ssl
212 ./client -auth -server=[serverAddress:port] -[methodFlag] params : Authenticate session
213
214 methodFlags:
215 -e echo # used to test connectivity to server NOOP
216 params:
217 -message string to be echoed back from the server
218 e.g. ./client -server=localhost:7777 -e -message MESSAGE_TO_BE_ECHOED
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400219 -c create chassis
220 params:
221 -clli CLLI_NAME
222 -xos_address XOS_TOSCA_IP
223 -xos_port XOS_TOSCA_LISTEN_PORT
224 -rack [optional default 1]
225 -shelf [optional default 1]
donNewtonAlphab3279ea2018-09-18 15:55:32 -0400226 e.g. ./client -server=localhost:7777 -c -clli MY_CLLI -xos_address 192.168.0.1 -xos_port 30007 -rack 1 -shelf 1
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400227 -s add physical olt chassis to chassis
228 params:
229 -clli CLLI_NAME - identifies abstract chassis to assign olt chassis to
230 -olt_address - OLT_CHASSIS_IP_ADDRESS
231 -olt_port - OLT_CHASSIS_LISTEN_PORT
232 -name - OLT_NAME internal human readable name to identify OLT_CHASSIS
233 -driver [openolt,asfvolt16,adtran,tibits] - used to tell XOS which driver should be used to manange chassis
234 -type [edgecore,adtran,tibit] - used to tell AbstractOLT how many ports are available on olt chassis
donNewtonAlphab3279ea2018-09-18 15:55:32 -0400235 e.g. ./client -server abstractOltHost:7777 -s -clli MY_CLLI -olt_address 192.168.1.100 -olt_port=9191 -name=slot1 -driver=openolt -type=adtran
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400236 -o provision ont - adds ont to whitelist in XOS on a specific port on a specific olt chassis based on abstract -> phyisical mapping
237 params:
238 -clli CLLI_NAME
239 -slot SLOT_NUMBER [1-16]
240 -port OLT_PORT_NUMBER [1-16]
241 -ont ONT_NUMBER [1-64]
242 -serial ONT_SERIAL_NUM
donNewtonAlphab3279ea2018-09-18 15:55:32 -0400243 e.g. ./client -server=localhost:7777 -o -clli=MY_CLLI -slot=1 -port=1 -ont=22 -serial=aer900jasdf `
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400244
245 fmt.Println(output)
Author Namea594e632018-08-10 11:33:58 -0400246}