Indeed, stdin seems to be closed and vppctl is not written with that in mind, 
just check
https://git.fd.io/vpp/tree/src/vpp/app/vppctl.c#n223 or 
https://git.fd.io/vpp/tree/src/vpp/app/vppctl.c#n267 for examples... If you 
have s->fd == STDIN_FILENO (as it seems to be the case here) things are going 
to break.

If I understand correctly, your issue with API is that you have several threads 
which must use the API in parallel? I do not know if/how it supposed to work. 
Maybe someone more versed in APIs can jump in?

Best
ben

> -----Original Message-----
> From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Chris Luke
> via lists.fd.io
> Sent: mercredi 18 novembre 2020 00:09
> To: Aniket Pugaonkar <aniket.pugaon...@gmail.com>; Benoit Ganne (bganne)
> <bga...@cisco.com>
> Cc: vpp-dev@lists.fd.io
> Subject: Re: [EXTERNAL] Re: [vpp-dev] vppctl fails from within the
> application (system cmd returns 256)
> 
> On this line in the trace:
> 
> 
> 
> [pid 2536742] socket(AF_UNIX, SOCK_STREAM, 0) = 0
> 
> 
> 
> It says it’s returning file descriptor 0 for the socket. Similarly other
> file opens and subsequent closes are using descriptor 0. 0 is normally
> stdin. Are stdin & out closed? That could cause all kinds of strange
> issues, especially when it tries to print the results to a closed stdout
> descriptor.
> 
> 
> 
> Chris.
> 
> 
> 
> From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Aniket
> Pugaonkar
> Sent: Tuesday, November 17, 2020 17:04
> To: Benoit Ganne (bganne) <bga...@cisco.com>
> Cc: vpp-dev@lists.fd.io
> Subject: [EXTERNAL] Re: [vpp-dev] vppctl fails from within the application
> (system cmd returns 256)
> 
> 
> 
> sorry, forgot to reply-all
> 
> 
> 
> Hi Ben,
> 
> 
> 
> When i use the same command in sample test application (just int main()..)
> they work fine. but when I add them in my multithreaded application, it
> does not work.  Please see below Strace output of the application.   even
> fully specifying path to vppctl and cli.sock is not working
> 
> 
> 
> since it is multithreaded, the main process creates the app
> (vppcom_app_create).
> 
> another thread configures the interfaces using the CLI (vppctl) - which is
> failing these commands
> 
> one thread is using VCL to receive, another thread is using VCL to
> transmit.
> 
> before VCL Rx and Tx threads are started, configuration thread tries to
> configure the VPP interface using the CLI.
> 
> 
> 
> We ran into issues while making this application (that uses VCL)  work
> with another application that used VAPI to configure VPP, and had to
> revert back the code to vpp cli for other application.
> 
> 
> 
> commands that fail from my multithreaded application:
> 
>  /usr/bin/vppctl -s /run/vpp/cli.sock  create sub-interfaces
> HundredGigabitEthernet12/0/0 701
> 
>  /usr/bin/vppctl -s /run/vpp/cli.sock set interface state
> HundredGigabitEthernet12/0/0 up
> 
>  /usr/bin/vppctl -s /run/vpp/cli.sock set interface state
> HundredGigabitEthernet12/0/0.701up
> 
> /usr/bin/vppctl -s /run/vpp/cli.sock  set interface ip address
> HundredGigabitEthernet12/0/0.701 fd0d:1:2:cc:a5a5:301f:fe3a:a5a5/64
> 
> 
> 
> 
> 
> 
> 
> [pid 2536742] rt_sigaction(SIGCHLD, {sa_handler=SIG_DFL, sa_mask=[],
> sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7fbced84f790},
> {sa_handler=0x55ee9d32d180, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART,
> sa_restorer=0x7fbced84f790}, 8) = 0
> [pid 2536742] execve("/usr/bin/vppctl", ["/usr/bin/vppctl", "-s",
> "/run/vpp/cli.sock", "ip", "mroute", "add",
> "ff38:23:2001:5b0:2000::3002/128", "via", "tuntap-0", "Accept"],
> 0x55ee9ead72c0 /* 27 vars */) = 0
> [pid 2536742] brk(NULL)                 = 0x55fce62d4000
> [pid 2536742] arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc94d85710) = -1
> EINVAL (Invalid argument)
> [pid 2536742] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file
> or directory)
> [pid 2536742] openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 0
> [pid 2536742] fstat(0, {st_mode=S_IFREG|0644, st_size=62967, ...}) = 0
> [pid 2536742] mmap(NULL, 62967, PROT_READ, MAP_PRIVATE, 0, 0) =
> 0x7ffb8ce4f000
> [pid 2536742] close(0)                  = 0
> [pid 2536742] openat(AT_FDCWD, "/lib64/libvppinfra.so.20.05.1",
> O_RDONLY|O_CLOEXEC) = 0
> [pid 2536742] read(0,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\230\0\0\0\0\0\0"..., 832)
> = 832
> [pid 2536742] fstat(0, {st_mode=S_IFREG|0755, st_size=509240, ...}) = 0
> [pid 2536742] mmap(NULL, 8192, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffb8ce4d000
> [pid 2536742] mmap(NULL, 2603336, PROT_READ|PROT_EXEC,
> MAP_PRIVATE|MAP_DENYWRITE, 0, 0) = 0x7ffb8c9bb000
> [pid 2536742] mprotect(0x7ffb8ca35000, 2093056, PROT_NONE) = 0
> [pid 2536742] mmap(0x7ffb8cc34000, 8192, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 0, 0x79000) = 0x7ffb8cc34000
> [pid 2536742] mmap(0x7ffb8cc36000, 2376, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ffb8cc36000
> [pid 2536742] close(0)                  = 0
> [pid 2536742] openat(AT_FDCWD, "/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 0
> [pid 2536742] read(0,
> "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\305\0\0\0\0\0\0"...,
> 832) = 832
> [pid 2536742] fstat(0, {st_mode=S_IFREG|0755, st_size=2714928, ...}) = 0
> [pid 2536742] mmap(NULL, 3674432, PROT_READ|PROT_EXEC,
> MAP_PRIVATE|MAP_DENYWRITE, 0, 0) = 0x7ffb8c639000
> [pid 2536742] mprotect(0x7ffb8c7ba000, 2093056, PROT_NONE) = 0
> [pid 2536742] mmap(0x7ffb8c9b9000, 8192, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 0, 0x180000) = 0x7ffb8c9b9000
> [pid 2536742] close(0)                  = 0
> [pid 2536742] openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 0
> [pid 2536742] read(0,
> "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2607\2\0\0\0\0\0"..., 832)
> = 832
> [pid 2536742] fstat(0, {st_mode=S_IFREG|0755, st_size=4176104, ...}) = 0
> [pid 2536742] mmap(NULL, 3938144, PROT_READ|PROT_EXEC,
> MAP_PRIVATE|MAP_DENYWRITE, 0, 0) = 0x7ffb8c277000
> [pid 2536742] mprotect(0x7ffb8c430000, 2093056, PROT_NONE) = 0
> [pid 2536742] mmap(0x7ffb8c62f000, 24576, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 0, 0x1b8000) = 0x7ffb8c62f000
> [pid 2536742] mmap(0x7ffb8c635000, 14176, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ffb8c635000
> [pid 2536742] close(0)                  = 0
> [pid 2536742] mmap(NULL, 12288, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffb8ce4a000
> [pid 2536742] arch_prctl(ARCH_SET_FS, 0x7ffb8ce4a740) = 0
> [pid 2536742] mprotect(0x7ffb8c62f000, 16384, PROT_READ) = 0
> [pid 2536742] mprotect(0x7ffb8c9b9000, 4096, PROT_READ) = 0
> [pid 2536742] mprotect(0x7ffb8cc34000, 4096, PROT_READ) = 0
> [pid 2536742] mprotect(0x55fce5ec7000, 4096, PROT_READ) = 0
> [pid 2536742] mprotect(0x7ffb8ce5f000, 4096, PROT_READ) = 0
> [pid 2536742] munmap(0x7ffb8ce4f000, 62967) = 0
> [pid 2536742] mmap(NULL, 131072, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffb8ce2a000
> [pid 2536742] socket(AF_UNIX, SOCK_STREAM, 0) = 0
> [pid 2536742] connect(0, {sa_family=AF_UNIX,
> sun_path="/run/vpp/cli.sock"}, 110) = 0
> [pid 2536742] ioctl(0, TCGETS, 0x7ffc94d85410) = -1 ENOTTY (Inappropriate
> ioctl for device)
> [pid 2536742] epoll_create1(0)          = 9
> [pid 2536742] epoll_ctl(9, EPOLL_CTL_ADD, 0, {EPOLLIN|EPOLLPRI|EPOLLERR,
> {u32=0, u64=140720308486144}}) = 0
> [pid 2536742] epoll_ctl(9, EPOLL_CTL_ADD, 0, {EPOLLIN|EPOLLPRI|EPOLLERR,
> {u32=0, u64=140720308486144}}) = -1 EEXIST (File exists)
> [pid 2536742] close(9)                  = 0
> [pid 2536742] writev(2, [{iov_base="main: epoll_ctl[0]: File exists\n",
> iov_len=32}], 1main: epoll_ctl[0]: File exists
> ) = 32
> [pid 2536742] exit_group(1)             = ?
> [pid 2536701] <... read resumed>"", 4096) = 0
> [pid 2536742] +++ exited with 1 +++
> [pid 2536701] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED,
> si_pid=2536742, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
> [pid 2536701] futex(0x2ab46dc, FUTEX_WAKE_PRIVATE, 1) = 1
> [pid 2536697] <... futex resumed>)      = 0
> [pid 2536701] close(22 <unfinished ...>
> [pid 2536697] futex(0x2ab4678, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
> 
> 
> 
> On Tue, Nov 17, 2020 at 11:07 AM Benoit Ganne (bganne) <bga...@cisco.com
> <mailto:bga...@cisco.com> > wrote:
> 
>       > Could anyone suggest anything else to check
> 
>       You can try to trace you process to see what is going on, eg.
>       ~# strace -f ./a.out
> 
>       > we had few issues with vpp
>       > api/vcl libraries and have not decided to pursue vpp - api for
> now, so
>       > vppctl is the only option.
> 
>       Can you share what prevents you from using the API? This is what is
> supposed to be used by an external controller. I do not think it is a good
> idea to use vppctl in the long run (nonetheless because errors are hard to
> diagnose, as you can see tight now).
> 
>       Best
>       ben
> 
> 
> 
> 
> 
> 
> --
> 
> 
> Thanks and regards,
> Aniket Pugaonkar

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#18078): https://lists.fd.io/g/vpp-dev/message/18078
Mute This Topic: https://lists.fd.io/mt/78328795/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to