diff options
author | Andre Guedes <andre.guedes@intel.com> | 2019-10-04 10:56:30 -0700 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@ocrete.ca> | 2020-02-05 22:28:12 +0000 |
commit | e74c807633f6584a51b4c48c02e933f72c2b2eca (patch) | |
tree | b07bea46f26e7466e92310c2d44efbc802b8e746 /ext/avtp | |
parent | 478fb29974dec7595c5db50e45655e8121cd4ad7 (diff) | |
download | gstreamer-plugins-bad-e74c807633f6584a51b4c48c02e933f72c2b2eca.tar.gz |
avtp: Refactor if_index code
This patch refactors both avtpsink and avtpsrc code so we use the
if_nametoindex() helper instead of building a request and issuing an
ioctl to get the if_index.
Diffstat (limited to 'ext/avtp')
-rw-r--r-- | ext/avtp/gstavtpsink.c | 17 | ||||
-rw-r--r-- | ext/avtp/gstavtpsrc.c | 19 |
2 files changed, 17 insertions, 19 deletions
diff --git a/ext/avtp/gstavtpsink.c b/ext/avtp/gstavtpsink.c index 4b569348d..b878742df 100644 --- a/ext/avtp/gstavtpsink.c +++ b/ext/avtp/gstavtpsink.c @@ -208,11 +208,17 @@ static gboolean gst_avtp_sink_start (GstBaseSink * basesink) { int fd, res; - struct ifreq req; + unsigned int index; guint8 addr[ETH_ALEN]; struct sockaddr_ll sk_addr; GstAvtpSink *avtpsink = GST_AVTP_SINK (basesink); + index = if_nametoindex (avtpsink->ifname); + if (!index) { + GST_ERROR_OBJECT (avtpsink, "Failed to get if_index: %s", strerror (errno)); + return FALSE; + } + fd = socket (AF_PACKET, SOCK_DGRAM | SOCK_NONBLOCK, htons (ETH_P_TSN)); if (fd < 0) { GST_ERROR_OBJECT (avtpsink, "Failed to open socket: %s", strerror (errno)); @@ -234,17 +240,10 @@ gst_avtp_sink_start (GstBaseSink * basesink) goto err; } - snprintf (req.ifr_name, sizeof (req.ifr_name), "%s", avtpsink->ifname); - res = ioctl (fd, SIOCGIFINDEX, &req); - if (res < 0) { - GST_ERROR_OBJECT (avtpsink, "Failed to ioctl(): %s", strerror (errno)); - goto err; - } - sk_addr.sll_family = AF_PACKET; sk_addr.sll_protocol = htons (ETH_P_TSN); sk_addr.sll_halen = ETH_ALEN; - sk_addr.sll_ifindex = req.ifr_ifindex; + sk_addr.sll_ifindex = index; sk_addr.sll_hatype = 0; sk_addr.sll_pkttype = 0; memcpy (sk_addr.sll_addr, addr, ETH_ALEN); diff --git a/ext/avtp/gstavtpsrc.c b/ext/avtp/gstavtpsrc.c index 39fa7a298..9db1fd1eb 100644 --- a/ext/avtp/gstavtpsrc.c +++ b/ext/avtp/gstavtpsrc.c @@ -195,28 +195,27 @@ static gboolean gst_avtp_src_start (GstBaseSrc * basesrc) { int fd, res; + unsigned int index; guint8 addr[ETH_ALEN]; - struct ifreq req = { 0 }; struct sockaddr_ll sk_addr = { 0 }; struct packet_mreq mreq = { 0 }; GstAvtpSrc *avtpsrc = GST_AVTP_SRC (basesrc); + index = if_nametoindex (avtpsrc->ifname); + if (!index) { + GST_ERROR_OBJECT (avtpsrc, "Failed to get if_index: %s", strerror (errno)); + return FALSE; + } + fd = socket (AF_PACKET, SOCK_DGRAM, htons (ETH_P_TSN)); if (fd < 0) { GST_ERROR_OBJECT (avtpsrc, "Failed to open socket: %s", strerror (errno)); return FALSE; } - snprintf (req.ifr_name, sizeof (req.ifr_name), "%s", avtpsrc->ifname); - res = ioctl (fd, SIOCGIFINDEX, &req); - if (res < 0) { - GST_ERROR_OBJECT (avtpsrc, "Failed to ioctl(): %s", strerror (errno)); - goto err; - } - sk_addr.sll_family = AF_PACKET; sk_addr.sll_protocol = htons (ETH_P_TSN); - sk_addr.sll_ifindex = req.ifr_ifindex; + sk_addr.sll_ifindex = index; res = bind (fd, (struct sockaddr *) &sk_addr, sizeof (sk_addr)); if (res < 0) { @@ -231,7 +230,7 @@ gst_avtp_src_start (GstBaseSrc * basesrc) goto err; } - mreq.mr_ifindex = req.ifr_ifindex; + mreq.mr_ifindex = index; mreq.mr_type = PACKET_MR_MULTICAST; mreq.mr_alen = ETH_ALEN; memcpy (&mreq.mr_address, addr, ETH_ALEN); |