How to implement callhome feature using libnetconf2.
Hi,
I want to implement callhome feature from my server (NOT NETOPEER) . Can you please tell me how can I implement it . I mean algorithm to be used . I have see the confd(provided by cisco) way of working , where we just need to add socket, port and ip with an api . But while going through the libnetconf2 api's I could not get , what to use as it needs the client name. Can you pl enlighten me on the procedure to be followed to implement callhome.
Thanks
Hi, just look at netopeer2 implementation, it just applies values modeled in ietf-netconf-server. I think the API is quite simple to use, actually. The clients and endpoints just need to be organized so you need to set some arbitrary names for them (required by the YANG model).
Regards, Michal
Hi michal,
I went through the implementation of netopeer2 , I implemented that on my application using following steps:
- Add client
- Add end point
- Set endpoint address as host address
- Set port as port where application is running
- Set the connection type as persistent. 6 connect callhome client.
Through the callhome is able to ping the client ip (used netconf console to verify it) , but its unable is actually connect and do a handshake .
I tried opendaylight server to check the callhome feature where in odl server was running. Then first used a PUT request via postman { "device": { "unique-id": "NodeCallHome2", "credentials": { "username": "xyz", "passwords": [ "123" ] }, "ssh-host-key": "ABCCDB3NzaC1yc2EAAAABIwAAAQEAv4Wv+6+vbnd3OGb0bjfdODCDNeFMaP4oqY1NftDP8jCWNI0KNWuaVuSuNL/weyyEdQ0851YrkiE9/jQ+vDtFLxcY//wY97cHyYkM6gBos7tTwCBiRfTlmFHL8G+9pneUJPZVwRyiCi6XANt1xRMNfrFTYpfJWLl3GrFcUEnGz7JhKSSIaxbYuaRweSUQS0rY/t4rE7r3cUSxNBZ+KxLMhS9Dsoycw+S4ZrtKaGmczXsecZbiTOTfqogtZKxntSDGdJYl9qtpT9PbeYBTn6/8EF7Awfi46x7u+Pek1UvEgPZSop8SEV9x2z1eZfu/rHrgPPlP3PugkEsXabjrWv4y76==" } } and then used a get for call home . If the callhome is active the status should say CONNECTED , but its showing everytime DISCONNECTED , meaning its unable to connect to callhome.
I added the following to my code
nc_server_ssh_ch_client_set_auth_methods(client_name,NC_SSH_AUTH_PUBLICKEY);
nc_server_ssh_ch_client_add_hostkey( client_name, "ssh_host_dsa_key", -1);
Can you please help me on this , if there is anything I might be missing , or anything I may be doing wrong.
Thanks & Regards, Vishal
Hi Vishal,
have you tried to print some libnetconf2 messages? Just based on you wrote I would say you are missing a callback that would actually retrieve the ssh_host_dsa_key. You can set it using nc_server_ssh_set_hostkey_clb. Then, to actually use publickey SSH authentication you need to set some authorized keys (libnetconf2 should definitely inform about this) by either this or this function.
Regards, Michal
Thanks for the explanation michal . But the nc_server_ssh_set_hostkey_clb I had already set as a part of server initialization , with the private key path provided to the callback. So the direct login to the server works. Apart from this , I tried to use to use the function to set the public key as suggested by you, but still the callhome did not work. As my libnetconf2 was older (12.27) , so a file nc_server_ch.h was not present . I am presently updating it and will try to use api of setting endpoint host key, previously I was using the api of hostkey setting with client name (nc_server_ssh_ch_client_add_hostkey).
Can you pl tell me if this can work?
Hi, the function nc_server_ssh_ch_client_add_hostkey is present in the latest version and you have to call that, as well, so it should work. Like I said before, set some libnetconf2 verbosity and look at the messages, they should tell you what is wrong.
Regards, Michal
Hi Michal,
The function nc_server_ssh_ch_client_add_hostkey , I was already using to set the host_key . Following is the code added:
nc_server_ssh_ch_client_add_hostkey(client_name, "ssh_key", -1); nc_server_ssh_ch_client_set_auth_methods(client_name, NC_SSH_AUTH_PUBLICKEY); nc_server_ssh_add_authkey_path("xyz/key.pub", "admin");
And as you suggested I set the verbosity to full and checked the logs . Following is the message received: SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate).
Then I thought its the issue of public private key pair , so I generated it again using ssh-keygen , and tried with both rsa and dsa using sshkeygen -t rsa and sshkeygen -t dsa. Following is the error coming up repeatedly: LIBNETCONF : Received an SSH message "request-service" of subtype "ssh-userauth". LIBNETCONF : Received an SSH message "request-auth" of subtype "none". LIBNETCONF : Received an SSH message "request-auth" of subtype "publickey" LIBNETCONF : User "dmin" tried to use an unknown (unauthorized) public key. LIBNETCONF : Failed user "admin" authentication attempt (#1) LIBNETCONF : Received an SSH message "request-auth" of subtype "publickey". LIBNETCONF : User "secadmin" tried to use an unknown (unauthorized) public key. LIBNETCONF : Failed user "secadmin" authentication attempt (#2). LIBNETCONF : Communication SSH socket unexpectedly closed.
Can you pl check if above one can tell what is going wrong
Regards, Vishal
Hi Vishal,
okay, the output is helpful but did you modify it prior to putting here? Because I can see some inconsistent user names printed (dmin, admin, secadmin). You added the authorized SSH key only for admin so that is the only user that can authenticate with it.
Regards, Michal
yeah michal , I had edited the user name prior to posting , its secadmin throughout. I edited for some reasons, but only the user name , others remain the same . And the authorized keys are for those only
Okay, so you must set key for secadmin using nc_server_ssh_add_authkey_path() and then login as secadmin user, if you have not already. It should work then.
Regards, Michal
I am using the nc_server_ssh_add_authkey_path for user secadmin only as mentioned below nc_server_ssh_add_authkey_path("...xyzpath/key.pub", "secadmin"); and at that path I have provided the public key, which was generated by ssh-keygen.
But still I am unable to do a callhome.
Fine, then please post unaltered libnetconf2 output.
Regards, Michal
When I don't send any request following are the logs which comes up repeatedly :
LIBNETCONF : SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate).
Inside hostkey_clb
LIBNETCONF : nc_sock_connect(10.220.82.13, 6666, 5, -1)
LIBNETCONF : Trying to connect via IPv4.
LIBNETCONF : Successfully connected to 10.220.82.13:6666 over IPv4.
Inside hostkey_clb
LIBNETCONF : SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate).
"Inside hostkey_clb" - Added logs by me . Which shows that the callback which is registered for the hosthey set by "nc_server_ssh_set_hostkey_clb" gets called repeatedly .
Here the port(6666) refers to opendaylight server . Open daylight server is already running .
When a request PUT request is sent with body
{
"device": {
"unique-id": "NodeCallHome3",
"credentials": {
"username": "secadmin",
"passwords": [ "x123" ]
},
"ssh-host-key": "AAACB3NzaC1kc3MBAACBALzWhRQsEIjGJDhJw8uD5WfO/Xn5CjCIXqJhj8l3aq7ZDE+jxVOHfMTM4nOOPPKEJQm8YI36mcKy/Gp6DxvLVAHsXhNGRxEcW+cXFqI6vedLmTC0xZ8YQvECqbMkOTTrCTJiCDj1PObvALQUxfx6aFEdqQVzExACw4sgkdjgPTmJAAAAFQC3EMdM6xYaLsBLMT/jBTdVD9ByrwAAAIEAt4sS8Ggz2y6JqCFT/mi+tPXj0HZfgDMkBlQlC2JOxKUsS9D/olq5VrS0jYdipXIKkIaZkoDGfIJ0FVSR4pxSjL7rquVB/1s7zlcFGG9M5O3TGQ3AEv3Tb2JzOvtihpRLPKag5hxZn3XE9AxwQRnqmwgNg85U6zD30g/706STZOsAAACBAIR9vONXONFlmkh9ENhp2Q+prOLavhnZDnWVbPR6PWKT/tx47KpB6kZqDgAeBaawI7B7ZmufcWNZWccRDNSLuXXpKyN0wpALcFjeoNVCNLYIZGcKT+hnqo0sBYWqcDecaP6d14F94e6nmpIysK44QwV9xHGp5z3lNRyYO1rD43pI"
}
}
Following error gets displayed:
LIBNETCONF : Received an SSH message "request-service" of subtype "ssh-userauth".
LIBNETCONF : Received an SSH message "request-auth" of subtype "none".
LIBNETCONF : Received an SSH message "request-auth" of subtype "publickey".
LIBNETCONF : User "secadmin" tried to use an unknown (unauthorized) public key.
LIBNETCONF : Failed user "secadmin" authentication attempt (#1).
LIBNETCONF : Received an SSH message "request-auth" of subtype "publickey".
LIBNETCONF : User "secadmin" tried to use an unknown (unauthorized) public key.
LIBNETCONF : Failed user "secadmin" authentication attempt (#2).
LIBNETCONF : Communication SSH socket unexpectedly closed.
Hi, so I got sidetracked, the current problem seems to be in the server host key. Based you your JSON output, it is possible your callback is not providing a correct key. I have encountered this problem before and it is mostly an annoyance but the key must include the newline character after every 64 key characters, just like in the file that is generated. It will not work is the key is on a single line.
Regards, Michal
Hi Michal,
Based on your suggestion . I tried to create request with changing public keys to have newline character after every 64 characters .
following are the request I tried with no luck
- Inserted \n after every 64 characters
{ "device": { "unique-id": "NodeCallHome3", "credentials": { "username": "secadmin", "passwords": [ "x123" ] }, "ssh-host-key": "AAAAB3NzaC1kc3MAAACBALzWhRQsEIjGJDhJw8uD5WfO/Xn5CjCIXqJhj8l3aq7Z\nDE+jxVOHfMTM4nOOPPKEJQm8YI36mcKy/Gp6DxvLVAHsXhNGRxEcW+cXFqI6vedLnmTC0xZ8YQvECqbMkOTTrCTJiCDj1PObvALQUxfx6aFEdqQVzExACw4sgkdjgPTmJ\nAAAAFQC3EMdM6xYaLsBLMT/jBTdVD9ByrwAAAIEAt4sS8Ggz2y6JqCFT/mi+tPXj\n0HZfgDMkBlQlC2JOxKUsS9D/olq5VrS0jYdipXIKkIaZkoDGfIJ0FVSR4pxSjL7r\nquVB/1s7zlcFGG9M5O3TGQ3AEv3Tb2JzOvtihpRLPKag5hxZn3XE9AxwQRnqmwgN\ng85U6zD30g/706STZOsAAACBAIR9vONXONFlmkh9ENhp2Q+prOLavhnZDnWVbPR6\nPWKT/tx47KpB6kZqDgAeBaawI7B7ZmufcWNZWccRDNSLuXXrKyN0wpALcFjeoNVC\nNLYIZGcKT+hnqo0sBYWqcDecaP6d14F94e6nmpIysK44QwV9xHGp5z3lNRyYO1rD\n43pIA" } }
error: Inside hostkey_clb LIBNETCONF : SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate). LIBNETCONF : nc_sock_connect(10.220.82.13, 6666, 5, -1) LIBNETCONF : Trying to connect via IPv4. LIBNETCONF : Successfully connected to 10.220.82.13:6666 over IPv4. Inside hostkey_clb LIBNETCONF : SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate)
response of get request from postman to the odl - DISCONNECTED
- Hit enter after every 64 characters
{ "device": { "unique-id": "NodeCallHome4", "credentials": { "username": "secadmin", "passwords": [ "x123" ] }, "ssh-host-key": "AAAAB3NzaC1kc3MAAACBALzWhRQsEIjGJDhJw8uD5WfO/Xn5CjCIXqJhj8l3aq7Z DE+jxVOHfMTM4nOOPPKEJQm8YI36mcKy/Gp6DxvLVAHsXhNGRxEcW+cXFqI6vedL mTC0xZ8YQvECqbMkOTTrCTJiCDj1PObvALQUxfx6aFEdqQVzExACw4sgkdjgPTmJ AAAAFQC3EMdM6xYaLsBLMT/jBTdVD9ByrwAAAIEAt4sS8Ggz2y6JqCFT/mi+tPXj 0HZfgDMkBlQlC2JOxKUsS9D/olq5VrS0jYdipXIKkIaZkoDGfIJ0FVSR4pxSjL7r quVB/1s7zlcFGG9M5O3TGQ3AEv3Tb2JzOvtihpRLPKag5hxZn3XE9AxwQRnqmwgN g85U6zD30g/706STZOsAAACBAIR9vONXONFlmkh9ENhp2Q+prOLavhnZDnWVbPR6 PWKT/tx47KpB6kZqDgAeBaawI7B7ZmufcWNZWccRDNSLuXXrKyN0wpALcFjeoNVC NLYIZGcKT+hnqo0sBYWqcDecaP6d14F94e6nmpIysK44QwV9xHGp5z3lNRyYO1rD 43pI" } }
error: Inside hostkey_clb LIBNETCONF : SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate). LIBNETCONF : nc_sock_connect(10.220.82.13, 6666, 5, -1) LIBNETCONF : Trying to connect via IPv4. LIBNETCONF : Successfully connected to 10.220.82.13:6666 over IPv4. Inside hostkey_clb LIBNETCONF : SSH key exchange error (Received SSH_MSG_DISCONNECT: 9:Server key did not validate)
response of get request from postman to the odl - DISCONNECTED
So as per the response above . I think that using \n after 64 characters doesnot get recognized even by the server . If I directly give the public key(copy paste) to the request AUTH FAILURE comes I.e at least server is able to recognize it. Even though it throws error which was mentioned in the above chat.
Can you pl see the request and tell me if I am doing the addition of \n 64 char correctly or as per what you stated?
Note that this time I again recreated public/private key pair and used the new one. Just to make sure I am not having an error related to public/private key
Thanks & Regards, Vishal
Hi Vishal, if I understand it correctly, your client did manage to authenticate the server so you know where the problem is, nothing more I can help with.
As for the failing public key authentication, I do not know what else to tell you except that it must be a problem of configuration, the authentication itself works. You can try to add some messages or use a debugger to look at what is happening in session_server_ssh.c:nc_sshcb_auth_pubkey(), it is the function that verifies client public keys. But there are quite a lot of messages already so I keep thinking the problem is what the library says, you are trying to use a private key, whose public key was not added as authorized (meaning you have non-matching private/public key pair).
Regards, Michal
Hi Michal,
Thanks for the help. I am now able to do the handshaking of callhome . The problem I found was the following: instead of NC_SSH_AUTH_PUBLICKEY. I had to give NC_SSH_AUTH_PASSWORD as the auth type nc_server_ssh_ch_client_set_auth_methods(client_name,NC_SSH_AUTH_PASSWORD)
Also I redirected the hostkey to take the private keys from the server which gets created at start i.e /etc/ssh path . And taken the public key of that one . So now from the postman If I send the PUT request , its able to recognize it and hits the callback which was set for "nc_connect_ch_client_dispatch". So the auth type "NC_SSH_AUTH_PUBLICKEY" doesnot work for me.
But I have moved into a next issue where once I send the callhome request from postman using PUT . For the Get request it still says DISCONNECTED. I have made the callback (nc_connect_ch_client_dispatch) to work just like login. i.e session id gets generated and set the session data using nc_session_set_data() and then use nc_ps_add_session().
Although in my console logs where I have set the verbosity of libnetconf logs to full shows no error but In the opendaylight I can see the following error:
5:05:41.347 INFO [nioEventLoopGroup-4-91] Activating NETCONF channel for ip /10.220.82.74:49139 device context org.opendaylight.netconf.callhome.mount.CallHomeMountSessionContext@35555864 15:05:41.347 INFO [opendaylight-cluster-data-notification-dispatcher-637] Setting failed status for callhome device id:Uri{_value=NodeCallHome7}. 15:05:41.347 INFO [opendaylight-cluster-data-notification-dispatcher-646] Setting failed status for callhome device id:Uri{_value=NodeCallHome7}. 15:05:41.348 INFO [nioEventLoopGroup-4-91] Activating Netconf channel for /10.220.82.74:49139 with org.opendaylight.netconf.callhome.mount.CallHomeMountSessionContext$1@2d88165c 15:15:41.673 INFO [nioEventLoopGroup-4-92] Removing Uri{_value=NodeCallHome7} from Netconf Topology. 15:15:41.674 WARN [nioEventLoopGroup-4-92] RemoteDevice{NodeCallHome7}: Session terminated Session closed 15:15:41.676 INFO [nioEventLoopGroup-4-92] Removing Uri{_value=NodeCallHome7} from Netconf Topology. 15:15:41.677 WARN [remote-connector-processing-executor-69] RemoteDevice{NodeCallHome7}: Attempting to build schema context from required sources 5:15:41.676 WARN [remote-connector-processing-executor-69] RemoteDevice{NodeCallHome7}: Unable to detect available schemas, get to /(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)netconf-state/schemas failed, [RpcError [message=Session closed, severity=ERROR, errorType=TRANSPORT, tag=operation-failed, applicationTag=null, info=null, cause=null]] 15:15:41.676 WARN [remote-connector-processing-executor-69] RemoteDevice{NodeCallHome7}: Netconf device does not provide all yang models reported in hello message capabilities, required but not provided: [(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf, (urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring, (com:xyz:security:radius?revision=2015-12-03)radius, (http://openconfig.net/yang/types/yang?revision=2018-11-21)openconfig-yang-types, (urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types, (http://openconfig.net/yang/openconfig-types?revision=2018-11-21)openconfig-types, (http://openconfig.net/yang/openconfig-ext?revision=2018-10-17)openconfig-extensions, (urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata, (http://openconfig.net/yang/alarms/types?revision=2018-11-21)openconfig-alarm-types, (urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang, (http://openconfig.net/yang/platform-types?revision=2018-11-21)openconfig-platform-types, (http://openconfig.net/yang/platform?revision=2018-11-21)openconfig-platform, (urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types, (com:xyz:security:user?revision=2016-12-21)user, (urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm, (urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults] 15:15:41.677 WARN [remote-connector-processing-executor-69] RemoteDevice{NodeCallHome7}: Attempting to build schema context from required sources 15:15:41.677 INFO [opendaylight-cluster-data-notification-dispatcher-649] Setting failed status for callhome device id:Uri{_value=NodeCallHome7}. 15:15:41.677 WARN [nioEventLoopGroup-4-92] RemoteDevice{NodeCallHome7}: Session went down java.io.IOException: End of input detected. Close the session. at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.endOfInput(AbstractNetconfSession.java:94) [281:org.opendaylight.netconf.netty-util:1.6.1] at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.channelInactive(AbstractNetconfSession.java:174) [281:org.opendaylight.netconf.netty-util:1.6.1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:242) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:228) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:221) [104:io.netty.transport:4.1.34.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:390) [99:io.netty.codec:4.1.34.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:355) [99:io.netty.codec:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:242) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:228) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:221) [104:io.netty.transport:4.1.34.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:390) [99:io.netty.codec:4.1.34.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:355) [99:io.netty.codec:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:242) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:228) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:221) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1403) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:242) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext.access$300(AbstractChannelHandlerContext.java:38) [104:io.netty.transport:4.1.34.Final] at io.netty.channel.AbstractChannelHandlerContext$4.run(AbstractChannelHandlerContext.java:233) [104:io.netty.transport:4.1.34.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [101:io.netty.common:4.1.34.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [101:io.netty.common:4.1.34.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:495) [104:io.netty.transport:4.1.34.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905) [101:io.netty.common:4.1.34.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [101:io.netty.common:4.1.34.Final] at java.lang.Thread.run(Thread.java:745) [?:?] 15:15:41.677 INFO [opendaylight-cluster-data-notification-dispatcher-647] Setting failed status for callhome device id:Uri{_value=NodeCallHome7}. 15:15:41.678 INFO [opendaylight-cluster-data-notification-dispatcher-649] Setting disconnected status for callhome device id:Uri{_value=NodeCallHome7}. 15:15:41.677 INFO [opendaylight-cluster-data-notification-dispatcher-648] Setting failed status for callhome device id:Uri{_value=NodeCallHome7}. 15:15:41.679 INFO [opendaylight-cluster-data-notification-dispatcher-647] Setting disconnected status for callhome device id:Uri{_value=NodeCallHome7}. 15:15:41.679 INFO [opendaylight-cluster-data-notification-dispatcher-652] Setting disconnected status for callhome device id:Uri{_value=NodeCallHome7}. 15:15:41.680 ERROR [remote-connector-processing-executor-70] RemoteDevice{NodeCallHome7}: Initialization in sal failed, disconnecting from device
Can you pl check and tell me why the callhome is not getting recognized?
I suspect that there should be a medium to tell the (opendaylight/external) means that callhome is successfull. If you think I may be correct , can you tell me which libnetconf function call I should use to make it work
Hi,
there is no special way "of telling that Call Home is successful", a NETCONF session is simply created. I have no idea what this Opendaylight client expects from the server. I would suggest you use netopeer2-cli to test your Call Home. I can help you with problems there and if that works but your scenario does not, most likely there is a problem in your client, not libnetconf2.
Regards, Michal