All of lore.kernel.org
 help / color / mirror / Atom feed
* RTNet and setsockopt
@ 2020-04-16 16:08 Per Oberg
       [not found] ` <VI1PR05MB59172B3C0D8909BD37F9E947F6D80@VI1PR05MB5917.eurprd05.prod.outlook.com>
  0 siblings, 1 reply; 4+ messages in thread
From: Per Oberg @ 2020-04-16 16:08 UTC (permalink / raw)
  To: xenomai

Dear list

I am "porting" a posix application using raw network packages to RTNet. The old code is trying to use setsockopt and ioctl. The calls I am trying to use are 

setsockopt: 
 SO_RCVTIMEO
 SO_SNDTIMEO
 SO_DONTROUTE

These return "No such device". I guess that this is because setsockopt is not rt-compatible, correct ? ( There seem to be no corresponding rt_setsockopt... )

ioctl :
 IFF_PROMISC | IFF_BROADCAST

These return "Operation not supported". 

My code works fairly well as it is, and I probably do not need SO_DONTROUTE, IFF_PROMISC, and IFF_BROADCAST with rtnet. I would, however, like to have SO_RCVTIMEO, SO_SNDTIMEO or nonblock. Do I need to use O_NONBLOCK together with send() instead or am I missing something ?

Best Regards
Per Öberg 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: RTNet and setsockopt
       [not found] ` <VI1PR05MB59172B3C0D8909BD37F9E947F6D80@VI1PR05MB5917.eurprd05.prod.outlook.com>
@ 2020-04-16 17:00   ` Per Oberg
  2020-04-16 18:04     ` Per Oberg
  0 siblings, 1 reply; 4+ messages in thread
From: Per Oberg @ 2020-04-16 17:00 UTC (permalink / raw)
  To: xenomai

----- Den 16 apr 2020, på kl 18:32, Lange Norbert norbert.lange@andritz.com skrev:

> Hello Per,

> setsockopt is supported by rtnet (and wrapped with the POSIX skin). That said,
> it supports very little options you are used from Linux. Do a grep -r on
> xenomais sources.
> Xenomai mostly uses ioctls for bringing up Interfaces, etc.

> There are subtile differences and limitations aswell. I am pretty sure now that
> most operations
> are behaving like you have an nonblocking filedescriptor / socket. The RT focus
> means that there
> typically is just a check if buffers are available, and no effort is made for
> waiting.
> So select will be your best friend.
> (I am just using packet sockets, but I believe it’s the same for all of them).

Thanks, I readded the list again. The reason I started looking into this is that I had issues with blocking sends. I wanted to see what happened if I pulled the plug on the ethernet and tried to recover afterwards. 

Digging around a bit is seems like I might actually have a compiler flag issue (again...). I tried compiling my network code as a shared library.

> Norbert Lange

> > -----Original Message-----
> > From: Xenomai <xenomai-bounces@xenomai.org> On Behalf Of Per Oberg via
> > Xenomai
> > Sent: Donnerstag, 16. April 2020 18:08
> > To: xenomai <xenomai@xenomai.org>
> > Subject: RTNet and setsockopt

> > NON-ANDRITZ SOURCE: BE CAUTIOUS WITH CONTENT, LINKS OR
> > ATTACHMENTS.


> > Dear list

> > I am "porting" a posix application using raw network packages to RTNet. The
> > old code is trying to use setsockopt and ioctl. The calls I am trying to use are

> > setsockopt:
> > SO_RCVTIMEO
> > SO_SNDTIMEO
> > SO_DONTROUTE

>> These return "No such device". I guess that this is because setsockopt is not
> > rt-
> > compatible, correct ? ( There seem to be no corresponding rt_setsockopt... )


> > ioctl :
> > IFF_PROMISC | IFF_BROADCAST

> > These return "Operation not supported".

> > My code works fairly well as it is, and I probably do not need SO_DONTROUTE,
> > IFF_PROMISC, and IFF_BROADCAST with rtnet. I would, however, like to have
> > SO_RCVTIMEO, SO_SNDTIMEO or nonblock. Do I need to use O_NONBLOCK
> > together with send() instead or am I missing something ?

> > Best Regards
> > Per Öberg

> ________________________________

> This message and any attachments are solely for the use of the intended
> recipients. They may contain privileged and/or confidential information or
> other information protected from disclosure. If you are not an intended
> recipient, you are hereby notified that you received this email in error and
> that any review, dissemination, distribution or copying of this email and any
> attachment is strictly prohibited. If you have received this email in error,
> please contact the sender and delete the message and any attachment from your
> system.

> ANDRITZ HYDRO GmbH

> Rechtsform/ Legal form: Gesellschaft mit beschränkter Haftung / Corporation

> Firmensitz/ Registered seat: Wien

> Firmenbuchgericht/ Court of registry: Handelsgericht Wien

> Firmenbuchnummer/ Company registration: FN 61833 g

> DVR: 0605077

> UID-Nr.: ATU14756806

> Thank You
> _________

Thanks
Per Öberg


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: RTNet and setsockopt
  2020-04-16 17:00   ` Per Oberg
@ 2020-04-16 18:04     ` Per Oberg
  2020-04-17  6:18       ` Jan Kiszka
  0 siblings, 1 reply; 4+ messages in thread
From: Per Oberg @ 2020-04-16 18:04 UTC (permalink / raw)
  To: xenomai

----- Den 16 apr 2020, på kl 19:00, xenomai xenomai@xenomai.org skrev:
> ----- Den 16 apr 2020, på kl 18:32, Lange Norbert norbert.lange@andritz.com
> skrev:

> > Hello Per,

> > setsockopt is supported by rtnet (and wrapped with the POSIX skin). That said,
> > it supports very little options you are used from Linux. Do a grep -r on
> > xenomais sources.
> > Xenomai mostly uses ioctls for bringing up Interfaces, etc.

> > There are subtile differences and limitations aswell. I am pretty sure now that
> > most operations
> > are behaving like you have an nonblocking filedescriptor / socket. The RT focus
> > means that there
> > typically is just a check if buffers are available, and no effort is made for
> > waiting.
> > So select will be your best friend.
> > (I am just using packet sockets, but I believe it’s the same for all of them).

> Thanks, I readded the list again. The reason I started looking into this is that
> I had issues with blocking sends. I wanted to see what happened if I pulled the
> plug on the ethernet and tried to recover afterwards.

> Digging around a bit is seems like I might actually have a compiler flag issue
> (again...). I tried compiling my network code as a shared library.

Progress, i guess. It was the read that was became non blocking.

Still: I believe that "setsockopt" is missing for PF_PACKET, SOCK_RAW. I can se that it is implemented for some of the packet types but there is no reference to it in af_packet.c.

That said, I don't see how setsockopt is mapped to the different variants. I can se how recv and recfrom is mapped using the structure with the ".recvfrom = xxx" syntax but setsockopt seems to be different.

Also, when looking in the code i see that "MSG_DONTWAIT" is supported for rt_packet_recvmsg and that it sets sock->timeout to -1. So it seems a small fix to make this work, if I only knew where how setsockopt was mapped..

> > Norbert Lange

> > > -----Original Message-----
> > > From: Xenomai <xenomai-bounces@xenomai.org> On Behalf Of Per Oberg via
> > > Xenomai
> > > Sent: Donnerstag, 16. April 2020 18:08
> > > To: xenomai <xenomai@xenomai.org>
> > > Subject: RTNet and setsockopt

> > > NON-ANDRITZ SOURCE: BE CAUTIOUS WITH CONTENT, LINKS OR
> > > ATTACHMENTS.

> > > Dear list

> > > I am "porting" a posix application using raw network packages to RTNet. The
> > > old code is trying to use setsockopt and ioctl. The calls I am trying to use are

> > > setsockopt:
> > > SO_RCVTIMEO
> > > SO_SNDTIMEO
> > > SO_DONTROUTE

> >> These return "No such device". I guess that this is because setsockopt is not
> > > rt-
> > > compatible, correct ? ( There seem to be no corresponding rt_setsockopt... )

> > > ioctl :
> > > IFF_PROMISC | IFF_BROADCAST

> > > These return "Operation not supported".

> > > My code works fairly well as it is, and I probably do not need SO_DONTROUTE,
> > > IFF_PROMISC, and IFF_BROADCAST with rtnet. I would, however, like to have
> > > SO_RCVTIMEO, SO_SNDTIMEO or nonblock. Do I need to use O_NONBLOCK
> > > together with send() instead or am I missing something ?

> > > Best Regards
> > > Per Öberg

> > ________________________________

> > This message and any attachments are solely for the use of the intended
> > recipients. They may contain privileged and/or confidential information or
> > other information protected from disclosure. If you are not an intended
> > recipient, you are hereby notified that you received this email in error and
> > that any review, dissemination, distribution or copying of this email and any
> > attachment is strictly prohibited. If you have received this email in error,
> > please contact the sender and delete the message and any attachment from your
> > system.

> > ANDRITZ HYDRO GmbH

> > Rechtsform/ Legal form: Gesellschaft mit beschränkter Haftung / Corporation

> > Firmensitz/ Registered seat: Wien

> > Firmenbuchgericht/ Court of registry: Handelsgericht Wien

> > Firmenbuchnummer/ Company registration: FN 61833 g

> > DVR: 0605077

> > UID-Nr.: ATU14756806

> > Thank You
> > _________

> Thanks
> Per Öberg

Thanks
Per Öberg 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: RTNet and setsockopt
  2020-04-16 18:04     ` Per Oberg
@ 2020-04-17  6:18       ` Jan Kiszka
  0 siblings, 0 replies; 4+ messages in thread
From: Jan Kiszka @ 2020-04-17  6:18 UTC (permalink / raw)
  To: Per Oberg, xenomai

On 16.04.20 20:04, Per Oberg via Xenomai wrote:
> ----- Den 16 apr 2020, på kl 19:00, xenomai xenomai@xenomai.org skrev:
>> ----- Den 16 apr 2020, på kl 18:32, Lange Norbert norbert.lange@andritz.com
>> skrev:
> 
>>> Hello Per,
> 
>>> setsockopt is supported by rtnet (and wrapped with the POSIX skin). That said,
>>> it supports very little options you are used from Linux. Do a grep -r on
>>> xenomais sources.
>>> Xenomai mostly uses ioctls for bringing up Interfaces, etc.
> 
>>> There are subtile differences and limitations aswell. I am pretty sure now that
>>> most operations
>>> are behaving like you have an nonblocking filedescriptor / socket. The RT focus
>>> means that there
>>> typically is just a check if buffers are available, and no effort is made for
>>> waiting.
>>> So select will be your best friend.
>>> (I am just using packet sockets, but I believe it’s the same for all of them).
> 
>> Thanks, I readded the list again. The reason I started looking into this is that
>> I had issues with blocking sends. I wanted to see what happened if I pulled the
>> plug on the ethernet and tried to recover afterwards.
> 
>> Digging around a bit is seems like I might actually have a compiler flag issue
>> (again...). I tried compiling my network code as a shared library.
> 
> Progress, i guess. It was the read that was became non blocking.
> 
> Still: I believe that "setsockopt" is missing for PF_PACKET, SOCK_RAW. I can se that it is implemented for some of the packet types but there is no reference to it in af_packet.c.
> 
> That said, I don't see how setsockopt is mapped to the different variants. I can se how recv and recfrom is mapped using the structure with the ".recvfrom = xxx" syntax but setsockopt seems to be different.
> 
> Also, when looking in the code i see that "MSG_DONTWAIT" is supported for rt_packet_recvmsg and that it sets sock->timeout to -1. So it seems a small fix to make this work, if I only knew where how setsockopt was mapped..
> 

There is RTNET_RTIOC_TIMEOUT to set the timeout of blocked operations on 
the socket. I honestly do not recall right now what the reasoning for 
going separate was, but adding SO_RCVTIMEO compatibility would sure be 
doable.

Note that RT-TCP already supports SO_SNDTIMEO.

Jan

-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-04-17  6:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-16 16:08 RTNet and setsockopt Per Oberg
     [not found] ` <VI1PR05MB59172B3C0D8909BD37F9E947F6D80@VI1PR05MB5917.eurprd05.prod.outlook.com>
2020-04-16 17:00   ` Per Oberg
2020-04-16 18:04     ` Per Oberg
2020-04-17  6:18       ` Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.