summaryrefslogtreecommitdiff
path: root/networking/libiproute/iplink.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/libiproute/iplink.c')
-rw-r--r--networking/libiproute/iplink.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c
index 7db4d7e15..3d3ea2a23 100644
--- a/networking/libiproute/iplink.c
+++ b/networking/libiproute/iplink.c
@@ -49,14 +49,11 @@ static void do_chflags(char *dev, uint32_t flags, uint32_t mask)
49 49
50 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 50 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));
51 fd = get_ctl_fd(); 51 fd = get_ctl_fd();
52 if (ioctl(fd, SIOCGIFFLAGS, &ifr)) { 52 xioctl(fd, SIOCGIFFLAGS, &ifr);
53 bb_perror_msg_and_die("SIOCGIFFLAGS");
54 }
55 if ((ifr.ifr_flags ^ flags) & mask) { 53 if ((ifr.ifr_flags ^ flags) & mask) {
56 ifr.ifr_flags &= ~mask; 54 ifr.ifr_flags &= ~mask;
57 ifr.ifr_flags |= mask & flags; 55 ifr.ifr_flags |= mask & flags;
58 if (ioctl(fd, SIOCSIFFLAGS, &ifr)) 56 xioctl(fd, SIOCSIFFLAGS, &ifr);
59 bb_perror_msg_and_die("SIOCSIFFLAGS");
60 } 57 }
61 close(fd); 58 close(fd);
62} 59}
@@ -66,15 +63,11 @@ static void do_changename(char *dev, char *newdev)
66{ 63{
67 struct ifreq ifr; 64 struct ifreq ifr;
68 int fd; 65 int fd;
69 int err;
70 66
71 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 67 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));
72 strncpy(ifr.ifr_newname, newdev, sizeof(ifr.ifr_newname)); 68 strncpy(ifr.ifr_newname, newdev, sizeof(ifr.ifr_newname));
73 fd = get_ctl_fd(); 69 fd = get_ctl_fd();
74 err = ioctl(fd, SIOCSIFNAME, &ifr); 70 xioctl(fd, SIOCSIFNAME, &ifr);
75 if (err) {
76 bb_perror_msg_and_die("SIOCSIFNAME");
77 }
78 close(fd); 71 close(fd);
79} 72}
80 73
@@ -88,9 +81,7 @@ static void set_qlen(char *dev, int qlen)
88 memset(&ifr, 0, sizeof(ifr)); 81 memset(&ifr, 0, sizeof(ifr));
89 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 82 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));
90 ifr.ifr_qlen = qlen; 83 ifr.ifr_qlen = qlen;
91 if (ioctl(s, SIOCSIFTXQLEN, &ifr) < 0) { 84 xioctl(s, SIOCSIFTXQLEN, &ifr);
92 bb_perror_msg_and_die("SIOCSIFXQLEN");
93 }
94 close(s); 85 close(s);
95} 86}
96 87
@@ -104,9 +95,7 @@ static void set_mtu(char *dev, int mtu)
104 memset(&ifr, 0, sizeof(ifr)); 95 memset(&ifr, 0, sizeof(ifr));
105 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 96 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));
106 ifr.ifr_mtu = mtu; 97 ifr.ifr_mtu = mtu;
107 if (ioctl(s, SIOCSIFMTU, &ifr) < 0) { 98 xioctl(s, SIOCSIFMTU, &ifr);
108 bb_perror_msg_and_die("SIOCSIFMTU");
109 }
110 close(s); 99 close(s);
111} 100}
112 101
@@ -122,9 +111,7 @@ static int get_address(char *dev, int *htype)
122 111
123 memset(&ifr, 0, sizeof(ifr)); 112 memset(&ifr, 0, sizeof(ifr));
124 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); 113 strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));
125 if (ioctl(s, SIOCGIFINDEX, &ifr) < 0) { 114 xioctl(s, SIOCGIFINDEX, &ifr);
126 bb_perror_msg_and_die("SIOCGIFINDEX");
127 }
128 115
129 memset(&me, 0, sizeof(me)); 116 memset(&me, 0, sizeof(me));
130 me.sll_family = AF_PACKET; 117 me.sll_family = AF_PACKET;
@@ -163,9 +150,10 @@ static void set_address(struct ifreq *ifr, int brd)
163 int s; 150 int s;
164 151
165 s = get_ctl_fd(); 152 s = get_ctl_fd();
166 if (ioctl(s, brd ? SIOCSIFHWBROADCAST :SIOCSIFHWADDR, ifr) < 0) { 153 if (brd)
167 bb_perror_msg_and_die(brd ? "SIOCSIFHWBROADCAST" : "SIOCSIFHWADDR"); 154 xioctl(s, SIOCSIFHWBROADCAST, ifr);
168 } 155 else
156 xioctl(s, SIOCSIFHWADDR, ifr);
169 close(s); 157 close(s);
170} 158}
171 159