Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: lance.lmwang@gmail.com
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH] Fix setsockopt IP_MULTICAST_TTL on OpenBSD
Date: Wed, 26 Jan 2022 09:23:15 +0800
Message-ID: <20220126012315.GA31182@gmail.com> (raw)
In-Reply-To: <8e52c403-c58c-98d0-ccca-e5549c9d88ea@triularity.org>

On Tue, Jan 25, 2022 at 04:28:33PM -0800, Chad Fraleigh wrote:
> Since apparently linux will auto-detect (as mentioned by Marton Balint), based on the optlen parameter, just using unsigned char in all cases seems to be the cleanest. However, I would advise including a comment in the code to that effect which says to ignore the [outdated] linux documentation (so someone doesn't needlessly "correct" it in the future).
> 

I agree with, use unsigned char is preferable for all system I think.

> I looked at the kernel source and it does work both ways:
> 
> static int do_ip_setsockopt(struct sock *sk, int level, int optname,
>                 sockptr_t optval, unsigned int optlen)
> {
>  ...
>         switch (optname) {
>  ...
>         case IP_MULTICAST_TTL:
>  ...
>                 if (optlen >= sizeof(int)) {
>                         if (copy_from_sockptr(&val, optval, sizeof(val)))
>                                 return -EFAULT;
>                 } else if (optlen >= sizeof(char)) {
>                         unsigned char ucval;
> 
>                         if (copy_from_sockptr(&ucval, optval, sizeof(ucval)))
>                                 return -EFAULT;
>                         val = (int) ucval;
>                 }
>         }
> ...
> }
> 
> This check has been in the kernel since at least 2.6.12-rc2 (from Apr 2005). It should work fine, unless newer ffmpeg builds support is needed on older systems. So the only question is how old are the kernels in IoT and android devices which might use the current ffmpeg?
> 
> 
> On 1/24/2022 11:25 PM, lance.lmwang@gmail.com wrote:
> > On Wed, Jan 12, 2022 at 12:13:13AM -0500, Brad Smith wrote:
> >> Fix setsockopt() usage on OpenBSD with IP_MULTICAST_TTL. The field
> >> type should be an unsigned char on anything but Linux.
> >>
> >>
> >> diff --git a/libavformat/udp.c b/libavformat/udp.c
> >> index 180d96a988..29aa865fff 100644
> >> --- a/libavformat/udp.c
> >> +++ b/libavformat/udp.c
> >> @@ -163,7 +163,13 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL,
> >>  {
> >>  #ifdef IP_MULTICAST_TTL
> >>      if (addr->sa_family == AF_INET) {
> >> -        if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, sizeof(mcastTTL)) < 0) {
> >> +#ifdef __linux__
> >> +        int ttl = mcastTTL;
> >> +#else
> >> +        unsigned char ttl = mcastTTL;
> >> +#endif
> > 
> > 
> > I don't have BSD system for test, but I prefer to use socklen_t, please try with my proposal patch:
> > 
> > ---
> >  libavformat/udp.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/libavformat/udp.c b/libavformat/udp.c
> > index 83c042d079..b9baa0a803 100644
> > --- a/libavformat/udp.c
> > +++ b/libavformat/udp.c
> > @@ -164,7 +164,9 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL,
> >  {
> >  #ifdef IP_MULTICAST_TTL
> >      if (addr->sa_family == AF_INET) {
> > -        if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, sizeof(mcastTTL)) < 0) {
> > +        socklen_t ttl = mcastTTL;
> > +
> > +        if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) {
> >              ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt(IP_MULTICAST_TTL)");
> >              return ff_neterrno();
> > 
> > 
> >> +
> >> +        if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) {
> >>              ff_log_net_error(NULL, AV_LOG_ERROR, "setsockopt(IP_MULTICAST_TTL)");
> >>              return ff_neterrno();
> >>          }
> >> _______________________________________________
> >> ffmpeg-devel mailing list
> >> ffmpeg-devel@ffmpeg.org
> >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >>
> >> To unsubscribe, visit link above, or email
> >> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> > 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

-- 
Thanks,
Limin Wang
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  parent reply	other threads:[~2022-01-26  1:23 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-12  5:13 Brad Smith
2022-01-23  5:25 ` Brad Smith
2022-01-23 11:57 ` Michael Niedermayer
2022-01-23 14:12   ` Marton Balint
2022-01-23 19:55   ` Brad Smith
2022-01-24 12:40     ` Michael Niedermayer
2022-01-25  5:28       ` Brad Smith
2022-01-25  7:25 ` lance.lmwang
2022-01-26  0:28   ` Chad Fraleigh
2022-01-26  1:10     ` Brad Smith
2022-01-26  1:23     ` lance.lmwang [this message]
2022-01-26 15:36 ` Brad Smith
2022-01-26 20:50   ` Marton Balint
2022-01-27  1:24     ` Chad Fraleigh
2022-01-27  1:59     ` lance.lmwang
2022-01-27  2:27       ` "zhilizhao(赵志立)"
2022-01-27  2:30       ` "zhilizhao(赵志立)"
2022-01-27  3:26         ` lance.lmwang
2022-01-27  5:16 ` [FFmpeg-devel] [PATCH] avformat/udp: Fix IP_MULTICAST_TTL for BSD compatibility lance.lmwang
2022-02-05  5:28   ` [FFmpeg-devel] [PATCH v2 1/3] avformat/udp: use one setsockopt for ipv4/ipv6 lance.lmwang
2022-02-05  5:28     ` [FFmpeg-devel] [PATCH v2 2/3] avformat/udp: Fix IP_MULTICAST_TTL for BSD compatibility lance.lmwang
2022-02-05  9:59       ` Marton Balint
2022-02-05 12:06         ` lance.lmwang
2022-02-05 21:26       ` Chad Fraleigh
2022-02-06  2:09         ` lance.lmwang
2022-02-06 22:15           ` Marton Balint
2022-02-06 22:27           ` Chad Fraleigh
2022-02-07  0:01             ` lance.lmwang
2022-02-05  5:28     ` [FFmpeg-devel] [PATCH v2 3/3] avformat/udp: remove IPPROTO_IPV6 macro lance.lmwang
2022-02-05  9:58     ` [FFmpeg-devel] [PATCH v2 1/3] avformat/udp: use one setsockopt for ipv4/ipv6 Marton Balint
2022-02-05 12:10       ` lance.lmwang
2022-02-05 12:31   ` [FFmpeg-devel] [PATCH v3 " lance.lmwang
2022-02-05 12:31     ` [FFmpeg-devel] [PATCH v3 2/3] avformat/udp: Fix IP_MULTICAST_TTL for BSD compatibility lance.lmwang
2022-02-11 21:05       ` Marton Balint
2022-02-12  0:39         ` lance.lmwang
2022-02-05 12:31     ` [FFmpeg-devel] [PATCH v3 3/3] avformat/udp: remove IPPROTO_IPV6 macro lance.lmwang
2022-02-10 23:56     ` [FFmpeg-devel] [PATCH v3 1/3] avformat/udp: use one setsockopt for ipv4/ipv6 lance.lmwang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220126012315.GA31182@gmail.com \
    --to=lance.lmwang@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git