From: Chad Fraleigh <chadf@triularity.org>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH v2 2/3] avformat/udp: Fix IP_MULTICAST_TTL for BSD compatibility
Date: Sat, 5 Feb 2022 13:26:18 -0800
Message-ID: <c35204ba-cfc2-ca95-17a8-dd5077d58625@triularity.org> (raw)
In-Reply-To: <1644038899-15433-2-git-send-email-lance.lmwang@gmail.com>
Since any [valid] value over 255 is impossible in the IPv4 protocol (the TTL field is only 8-bits), it should always be capped at 255 (for consistency) or return an invalid value error (the one I would suggest).
Despite VLC's reversed comment, using an int seems to be the exception to the rule (i.e. only linux and windows seem to use it [as-documented]), perhaps doing the unsigned char first and using the int as the fallback would be better? It's not really just a BSD thing, unless you also count LWIP and Solaris as BSD. Unless VLC's code history shows them doing it this way at one time and swapping it (but forgetting the comment) to fix a known bug?
On 2/4/2022 9:28 PM, lance.lmwang@gmail.com wrote:
> From: Limin Wang <lance.lmwang@gmail.com>
>
> Suggested by zhilizhao, vlc project has solved the compatibility by
> the same way, so I borrowed the comments from vlc project.
>
> Fix #ticket9449
>
> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> ---
> libavformat/udp.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/udp.c b/libavformat/udp.c
> index 3dc79eb..34488d6 100644
> --- a/libavformat/udp.c
> +++ b/libavformat/udp.c
> @@ -164,6 +164,10 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL,
> {
> int protocol, cmd;
>
> + /* There is some confusion in the world whether IP_MULTICAST_TTL
> + * takes a byte or an int as an argument.
> + * BSD seems to indicate byte so we are going with that and use
> + * int as a fallback to be safe */
> switch (addr->sa_family) {
> #ifdef IP_MULTICAST_TTL
> case AF_INET:
> @@ -183,8 +187,15 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL,
> }
>
> if (setsockopt(sockfd, protocol, cmd, &mcastTTL, sizeof(mcastTTL)) < 0) {
> - ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt");
> - return ff_neterrno();
> + /* BSD compatibility */
> + unsigned char ttl;
> +
> + ff_log_net_error(logctx, AV_LOG_DEBUG, "setsockopt");
> + ttl = (unsigned char)(( mcastTTL > 255 ) ? 255 : mcastTTL);
> + if (setsockopt(sockfd, protocol, cmd, &ttl, sizeof(ttl)) < 0) {
> + ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt");
> + return ff_neterrno();
> + }
> }
>
> return 0;
_______________________________________________
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".
next prev parent reply other threads:[~2022-02-05 21:26 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-12 5:13 [FFmpeg-devel] [PATCH] Fix setsockopt IP_MULTICAST_TTL on OpenBSD 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
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 [this message]
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=c35204ba-cfc2-ca95-17a8-dd5077d58625@triularity.org \
--to=chadf@triularity.org \
--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