int main(int argc, char *argv[])
{
- struct ifreq ifr;
struct sockaddr_can addr;
char *intf_name;
int family = PF_CAN, type = SOCK_RAW, proto = CAN_RAW;
}
addr.can_family = family;
- strcpy(ifr.ifr_name, intf_name);
- ioctl(sockfd, SIOCGIFINDEX, &ifr);
- addr.can_ifindex = ifr.ifr_ifindex;
+ addr.can_ifindex = if_nametoindex(intf_name);
if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
perror("bind");
return 1;
}
- addr.can_family = AF_CAN;
-
- strcpy(ifr.ifr_name, argv[1]);
- if (ioctl(s, SIOCGIFINDEX, &ifr) < 0) {
- perror("SIOCGIFINDEX");
+ strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);
+ ifr.ifr_name[IFNAMSIZ - 1] = '\0';
+ ifr.ifr_ifindex = if_nametoindex(ifr.ifr_name);
+ if (!ifr.ifr_ifindex) {
+ perror("if_nametoindex");
return 1;
}
+
+ addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
if (required_mtu > CAN_MTU) {
int timestamp = 0;
int datidx = 0;
unsigned long fflen = 0;
- struct ifreq ifr;
- int ifindex;
struct timeval tv, last_tv;
unsigned int n_pci;
int opt;
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
- strcpy(ifr.ifr_name, argv[optind]);
- ioctl(s, SIOCGIFINDEX, &ifr);
- ifindex = ifr.ifr_ifindex;
-
addr.can_family = AF_CAN;
- addr.can_ifindex = ifindex;
+ addr.can_ifindex = if_nametoindex(argv[optind]);
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
perror("bind");
{
int s;
struct sockaddr_can addr;
- struct ifreq ifr;
static struct can_isotp_options opts;
static struct can_isotp_fc_options fcopts;
static struct can_isotp_ll_options llopts;
setsockopt(s, SOL_CAN_ISOTP, CAN_ISOTP_RX_STMIN, &force_rx_stmin, sizeof(force_rx_stmin));
addr.can_family = AF_CAN;
- strcpy(ifr.ifr_name, argv[optind]);
- ioctl(s, SIOCGIFINDEX, &ifr);
- addr.can_ifindex = ifr.ifr_ifindex;
+ addr.can_ifindex = if_nametoindex(argv[optind]);
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
perror("bind");
{
int s;
struct sockaddr_can addr;
- struct ifreq ifr;
static struct can_isotp_options opts;
static struct can_isotp_ll_options llopts;
int opt;
setsockopt(s, SOL_CAN_ISOTP, CAN_ISOTP_TX_STMIN, &force_tx_stmin, sizeof(force_tx_stmin));
addr.can_family = AF_CAN;
- strcpy(ifr.ifr_name, argv[optind]);
- ioctl(s, SIOCGIFINDEX, &ifr);
- addr.can_ifindex = ifr.ifr_ifindex;
+ addr.can_ifindex = if_nametoindex(argv[optind]);
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
perror("bind");
static struct can_isotp_options opts;
static struct can_isotp_fc_options fcopts;
static struct can_isotp_ll_options llopts;
- struct ifreq ifr;
socklen_t sin_size = sizeof(clientaddr);
socklen_t caddrlen = sizeof(caddr);
}
caddr.can_family = AF_CAN;
- strcpy(ifr.ifr_name, argv[optind]);
- if (ioctl(sc, SIOCGIFINDEX, &ifr) < 0) {
- perror("SIOCGIFINDEX");
- exit(1);
- }
- caddr.can_ifindex = ifr.ifr_ifindex;
+ caddr.can_ifindex = if_nametoindex(argv[optind]);
if (bind(sc, (struct sockaddr *)&caddr, caddrlen) < 0) {
perror("bind");
fd_set rdfs;
int s, t;
struct sockaddr_can addr;
- struct ifreq ifr;
+ char if_name[IFNAMSIZ];
static struct can_isotp_options opts;
int opt, quit = 0;
int color = 0;
opts.flags |= CAN_ISOTP_LISTEN_MODE;
+ strncpy(if_name, argv[optind], IFNAMSIZ - 1);
+ if_name[IFNAMSIZ - 1] = '\0';
+
addr.can_family = AF_CAN;
- strcpy(ifr.ifr_name, argv[optind]);
- ioctl(s, SIOCGIFINDEX, &ifr);
- addr.can_ifindex = ifr.ifr_ifindex;
+ addr.can_ifindex = if_nametoindex(if_name);
setsockopt(s, SOL_CAN_ISOTP, CAN_ISOTP_OPTS, &opts, sizeof(opts));
if (nbytes > 4095)
return -1;
printbuf(buffer, nbytes, color?2:0, timestamp, format,
- &tv, &last_tv, dst, s, ifr.ifr_name, head);
+ &tv, &last_tv, dst, s, if_name, head);
}
if (FD_ISSET(t, &rdfs)) {
if (nbytes > 4095)
return -1;
printbuf(buffer, nbytes, color?1:0, timestamp, format,
- &tv, &last_tv, src, t, ifr.ifr_name, head);
+ &tv, &last_tv, src, t, if_name, head);
}
}
}
}
+ strncpy(ifr.ifr_name, argv[optind], IFNAMSIZ);
+ ifr.ifr_ifindex = if_nametoindex(ifr.ifr_name);
+ if (!ifr.ifr_ifindex) {
+ perror("if_nametoindex");
+ close(s);
+ exit(1);
+ }
+
addr.can_family = AF_CAN;
- strcpy(ifr.ifr_name, argv[optind]);
- ioctl(s, SIOCGIFINDEX, &ifr);
addr.can_ifindex = ifr.ifr_ifindex;
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
- strncpy(ifr.ifr_name, name, IFNAMSIZ);
+ strncpy(ifr.ifr_name, name, IFNAMSIZ - 1);
+ ifr.ifr_name[IFNAMSIZ - 1] = '\0';
if (ioctl(t, TUNSETIFF, (void *) &ifr) < 0) {
perror("ioctl tunfd");
int s; /* can raw socket */
struct sockaddr_can addr;
struct termios topts;
- struct ifreq ifr;
int select_stdin = 0;
int running = 1;
int tstamp = 0;
}
addr.can_family = AF_CAN;
-
- strcpy(ifr.ifr_name, argv[2]);
- if (ioctl(s, SIOCGIFINDEX, &ifr) < 0) {
- perror("SIOCGIFINDEX");
- return 1;
- }
- addr.can_ifindex = ifr.ifr_ifindex;
+ addr.can_ifindex = if_nametoindex(argv[2]);
/* disable reception of CAN frames until we are opened by 'O' */
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);