summaryrefslogtreecommitdiff
path: root/ext/avtp
diff options
context:
space:
mode:
authorAndre Guedes <andre.guedes@intel.com>2019-10-04 10:56:30 -0700
committerOlivier CrĂȘte <olivier.crete@ocrete.ca>2020-02-05 22:28:12 +0000
commite74c807633f6584a51b4c48c02e933f72c2b2eca (patch)
treeb07bea46f26e7466e92310c2d44efbc802b8e746 /ext/avtp
parent478fb29974dec7595c5db50e45655e8121cd4ad7 (diff)
downloadgstreamer-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.c17
-rw-r--r--ext/avtp/gstavtpsrc.c19
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);