Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gnmi not initiating connection??? #82

Open
allan-silverstein opened this issue Oct 12, 2020 · 7 comments
Open

gnmi not initiating connection??? #82

allan-silverstein opened this issue Oct 12, 2020 · 7 comments

Comments

@allan-silverstein
Copy link

Hello,
I'm trying to run a few simple gnmi tests (get request) and can't seem to get started. If I use a command line client of gnmi called "gnmic" (https://gnmic.kmrd.dev/), everything works fine to my device. The problem here is it appears a connection is never attempted?? It gets stuck on this
grpc.channel_ready_future(channel).result(timeout=10)

and says failed to connect. I ran a tcpdump on the interface to see what is happening but no traffic ever leaves the interface when I run the script??? I tried doing some logging but nothing is written the log file... Not sure how to troubleshoot here??

Here is the simple script:

import grpc
import sys
import re
from bin.gnmi_pb2_grpc import gNMIStub
from bin.gnmi_pb2 import (GetRequest, GetResponse, Path,
                                    PathElem, CapabilityRequest,
                                    Encoding, SetRequest, Update, TypedValue)
import logging
logging.basicConfig(filemode="w", filename="gnmi_app.log",
                    format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
                    datefmt='%H:%M:%S',level=logging.DEBUG,)
logging.getLogger("gnmi_app")


host = "10.191.252.157"
port = "50051" 
metadata=[('username', "xxxx"), ('password', "xxx")]

#####################
# Path builder
#####################
#def gnmi_path_generator(path_in_question):
## Removed code here as the script does not even get this far


try:
    channel = grpc.insecure_channel(':'.join([host, port]), metadata) # create an insecure channel
    grpc.channel_ready_future(channel).result(timeout=10) # specify timeout as 10s and provide the channel
    gnmi_stub = gNMIStub(channel) # creating the stub object and providing the channel
    path_string = "/drivenets-top/protocols/rsvp/config-items"
    get_path = gnmi_path_generator(path_string)
    get_message = GetRequest(path=[get_path], type=1, encoding=4) # paths are passed as a List.
    print(gnmi_stub.Get(get_message, metadata=metadata)) # printing the raw response
except grpc.FutureTimeoutError as e: # always check for TimeoutError
    print(e)
    print("Failed to connect")

Thx
Al Silverstein

@gcsl
Copy link
Collaborator

gcsl commented Oct 13, 2020 via email

@hellt
Copy link
Contributor

hellt commented Oct 13, 2020 via email

@allan-silverstein
Copy link
Author

I just tried it with a certificate, and the same problem (fails here: grpc.channel_ready_future(channel).result(timeout=10)) tcpdump shows a connection is not even attempted??? It just seems I'm blind at this point for troubleshooting??? Any suggestions for troubleshooting?
Thx
Al

############################################################
# First step to is to create a credential with certificate.
############################################################
with open("grpc_dnor.crt", "rb") as fp: 
    cert = fp.read()
credentials = grpc.ssl_channel_credentials(cert) # object type is grpc.ChannelCredentials

try:
    breakpoint()
    channel = grpc.secure_channel(':'.join([host, port]), credentials) # create the secure channel
    grpc.channel_ready_future(channel).result(timeout=10) # specify timeout as 10s and provide the channel
    gnmi_stub = gNMIStub(channel) # creating the stub object and providing the channel
    path_string = "/drivenets-top/protocols/rsvp/config-items"
    get_path = gnmi_path_generator(path_string)
    get_message = GetRequest(path=[get_path], type=1, encoding=4)
    print(gnmi_stub.Get(get_message, metadata=metadata)) # printing the raw response
except grpc.FutureTimeoutError as e: # always check for TimeoutError
    print(e)
    print("Failed to connect")

@gcsl
Copy link
Collaborator

gcsl commented Oct 13, 2020 via email

@allan-silverstein
Copy link
Author

I'm running on an Ubuntu server 18.04. tcpdump is being run on the Linux server (client). When I perform a tcpdump on the server and use gnmic, I see the traffic; even if the cert is wrong and it fails, I see packets initiated. Whenever I try to setup the channel with the python client (secure or insecure), I never see a single packet initiated from the server (via tcpdump). Again, I haven't tried gnmi_cli but I have tried gnmic (https://netdevops.me/2020/gnmic-gnmi-cli-client-and-collector/) from the same system and it works fine. Are there any debugging flags/logging I can set so I can see more information and possibly point to where the problem is?
Thx
Al

@gcsl
Copy link
Collaborator

gcsl commented Oct 13, 2020 via email

@allan-silverstein
Copy link
Author

I did do the gRPC Hello world example and it worked fine....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants