Hi,
i cannot understand netmgr_strtond routine.
assign :
my box name = vasa
and domain = “” (no domain)
if so :
netmgr_ndtostr(…)
will return /net/vasa
but call:
netmgr_strtond ("/net/vasa")
(or netmgr_strtond (“vasa”), netmgr_strtond (“localhost”), etc)
always returns error:
“No route to host”
where is my mistake, please?
–
Thanks
vasilii
vasilii <vv40in@rambler.ru> wrote:
Hi,
i cannot understand netmgr_strtond routine.
First of all, make sure QNET is running on your system.
assign :
my box name = vasa
and domain = “” (no domain)
You ALWAYS have a hostname and a domain, if QNET is running.
Check getconf CS_HOSTNAME, and getconf CS_DOMAIN. If you
don’t set CS_DOMAIN yourself, QNET will append a default
for your (.net.intra)
if so :
netmgr_ndtostr(…)
will return /net/vasa
I supposed you passed in ND_LOCAL_NODE as nd ?
but call:
netmgr_strtond ("/net/vasa")
(or netmgr_strtond (“vasa”), netmgr_strtond (“localhost”), etc)
always returns error:
“No route to host”
netmgr_strtond(“localhost”, 0) will fail with “No route to host”
because you don’t have a node named “localhost”.
I have no idea why “/net/vasa” or “vasa” will fail, do you have
a sample program to prove it ?
-xtang
a sample program to prove it ?
-xtang
it follows:
// file nd2str.c
#ifdef QNXNTO
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>
#include <sys/param.h>
#include <sys/netmgr.h>
int main(int argc, char **argv){
int x;
char name[256] = “”;
if (argc > 1) {
int nd;
if (!isdigit(argv[1][0])){
nd = netmgr_strtond (argv[0], 0);
if (nd >= 0){
printf (“nid: %d\n”,nd);
}else
perror (“netmgr_strtond”);
}else{
nd = atoi(argv[1]);
nd = netmgr_ndtostr (
ND2S_DIR_SHOW|ND2S_DOMAIN_SHOW|ND2S_LOCAL_STR|ND2S_NAME_SHOW|ND2S_QOS_SHOW|N
D2S_SEP_FORCE,
nd, name, sizeof name);
if (nd >= 0){
printf (“name: [%s]\n”, name);
}else
perror (“netmgr_ndtostr”);
}
return 0;
}else{
printf (“Usage: %s [number | name]\n”,argv[0]);
}
return 0;
}
#endif
if i enter
…/nd2str 0
then:
name: [/net/vasa1.vasahome.ru~loadbalance/]
but all of:
…/nd2str /net/vasa1.vasahome.ru
…/nd2str vasa1.vasahome.ru
…/nd2str /net/vasa1
…/nd2str vasa1
couses
“No route to host”
why, please?
–
Thanks
vasilii
vasilii <vv40in@rambler.ru> wrote:
a sample program to prove it ?
-xtang
You should really debug your program first, see what
you passed to netmgr_strtond() call.
With “argv[0]” you are try to resolving a node named “nd2str”,
try argv[1].
Also, may I suggest “nd >= 0” is not a valid test, you MUST
do “nd == -1” to test the error case (as document suggest).
-xtang
it follows:
// file nd2str.c
#ifdef QNXNTO
#include <stdio.h
#include <unistd.h
#include <string.h
#include <netdb.h
#include <errno.h
#include <sys/param.h
#include <sys/netmgr.h
int main(int argc, char **argv){
int x;
char name[256] = “”;
if (argc > 1) {
int nd;
if (!isdigit(argv[1][0])){
nd = netmgr_strtond (argv[0], 0);
if (nd >= 0){
printf (“nid: %d\n”,nd);
}else
perror (“netmgr_strtond”);
}else{
nd = atoi(argv[1]);
nd = netmgr_ndtostr (
ND2S_DIR_SHOW|ND2S_DOMAIN_SHOW|ND2S_LOCAL_STR|ND2S_NAME_SHOW|ND2S_QOS_SHOW|N
D2S_SEP_FORCE,
nd, name, sizeof name);
if (nd >= 0){
printf (“name: [%s]\n”, name);
}else
perror (“netmgr_ndtostr”);
}
return 0;
}else{
printf (“Usage: %s [number | name]\n”,argv[0]);
}
return 0;
}
#endif
if i enter
./nd2str 0
then:
name: [/net/vasa1.vasahome.ru~loadbalance/]
but all of:
./nd2str /net/vasa1.vasahome.ru
./nd2str vasa1.vasahome.ru
./nd2str /net/vasa1
./nd2str vasa1
couses
“No route to host”
why, please?
–
Thanks
vasilii