From bb9279493ef43242a5be0b96c79065f874c1ae7a Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Fri, 27 Jan 2017 14:25:16 +0100 Subject: hdlcutil: Remove undocumented user mode. The wrecking ball used was mostly this coccinelle script: @@ @@ - if (kernel_mode) { ... -} @@ @@ - if (!kernel_mode) { ... -} plus a bit of manual work for the remaining instances of kernel_mode. Signed-off-by: Ralf Baechle --- hdlcutil/hdrvcomm.c | 372 ++++++++++++++++++++++++---------------------------- 1 file changed, 168 insertions(+), 204 deletions(-) (limited to 'hdlcutil/hdrvcomm.c') diff --git a/hdlcutil/hdrvcomm.c b/hdlcutil/hdrvcomm.c index 7acc74d..d0dc8b6 100644 --- a/hdlcutil/hdrvcomm.c +++ b/hdlcutil/hdrvcomm.c @@ -62,7 +62,6 @@ /* ---------------------------------------------------------------------- */ -static int kernel_mode = 1; static const char *if_name = "bcsf0"; static char *prg_name; static int fd = -1; @@ -75,11 +74,9 @@ static int msqid = -1; static void terminate(void) { - if (kernel_mode) { - if (ioctl(fd, SIOCSIFFLAGS, &ifr_h) < 0) { - perror("ioctl (SIOCSIFFLAGS)"); - exit(1); - } + if (ioctl(fd, SIOCSIFFLAGS, &ifr_h) < 0) { + perror("ioctl (SIOCSIFFLAGS)"); + exit(1); } exit(0); } @@ -100,59 +97,60 @@ int hdrvc_recvpacket(char *pkt, int maxlen) struct sockaddr_ll from; socklen_t from_len = sizeof(from); - if (kernel_mode) { - if (!promisc) { - if (afpacket) { - struct sockaddr_ll sll; - struct packet_mreq mr; - - memset(&sll, 0, sizeof(sll)); - sll.sll_family = AF_PACKET; - sll.sll_ifindex = ifr_h.ifr_ifindex; - sll.sll_protocol = htons(ETH_P_AX25); - if (bind(fd, (struct sockaddr *)&sll, sizeof(sll)) < 0) { - fprintf(stderr, "%s: Error %s (%i) bind failed\n", - prg_name, strerror(errno), errno); - exit(-2); - } - memset(&mr, 0, sizeof(mr)); - mr.mr_ifindex = sll.sll_ifindex; - mr.mr_type = PACKET_MR_PROMISC; - if (setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, (char *)&mr, sizeof(mr)) < 0) { - fprintf(stderr, "%s: Error %s (%i) setsockopt SOL_PACKET, PACKET_ADD_MEMBERSHIP failed\n", - prg_name, strerror(errno), errno); - exit(-2); - } - } else { - struct sockaddr sa; - - strcpy(sa.sa_data, if_name); - sa.sa_family = AF_INET; - if (bind(fd, &sa, sizeof(sa)) < 0) { - fprintf(stderr, "%s: Error %s (%i) bind failed\n", - prg_name, strerror(errno), errno); - exit(-2); - } - ifr_new = ifr_h; - ifr_new.ifr_flags |= IFF_PROMISC; - if (ioctl(fd, SIOCSIFFLAGS, &ifr_new) < 0) { - perror("ioctl (SIOCSIFFLAGS)"); - exit(1); - } - signal(SIGTERM, terminate_sig); - signal(SIGQUIT, terminate_sig); - if (atexit((void (*)(void))terminate)) { - perror("atexit"); - terminate(); - } + if (!promisc) { + if (afpacket) { + struct sockaddr_ll sll; + struct packet_mreq mr; + + memset(&sll, 0, sizeof(sll)); + sll.sll_family = AF_PACKET; + sll.sll_ifindex = ifr_h.ifr_ifindex; + sll.sll_protocol = htons(ETH_P_AX25); + if (bind(fd, (struct sockaddr *)&sll, sizeof(sll)) < 0) { + fprintf(stderr, + "%s: Error %s (%i) bind failed\n", + prg_name, strerror(errno), errno); + exit(-2); + } + memset(&mr, 0, sizeof(mr)); + mr.mr_ifindex = sll.sll_ifindex; + mr.mr_type = PACKET_MR_PROMISC; + if (setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, (char *)&mr, sizeof(mr)) < 0) { + fprintf(stderr, + "%s: Error %s (%i) setsockopt SOL_PACKET, PACKET_ADD_MEMBERSHIP failed\n", + prg_name, strerror(errno), errno); + exit(-2); + } + } else { + struct sockaddr sa; + + strcpy(sa.sa_data, if_name); + sa.sa_family = AF_INET; + if (bind(fd, &sa, sizeof(sa)) < 0) { + fprintf(stderr, + "%s: Error %s (%i) bind failed\n", + prg_name, strerror(errno), errno); + exit(-2); + } + ifr_new = ifr_h; + ifr_new.ifr_flags |= IFF_PROMISC; + if (ioctl(fd, SIOCSIFFLAGS, &ifr_new) < 0) { + perror("ioctl (SIOCSIFFLAGS)"); + exit(1); + } + signal(SIGTERM, terminate_sig); + signal(SIGQUIT, terminate_sig); + if (atexit((void (*)(void))terminate)) { + perror("atexit"); + terminate(); } - promisc = 1; - fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); } - if (!pkt || maxlen < 2) - return 0; - return recvfrom(fd, pkt, maxlen, 0, (struct sockaddr *)&from, &from_len); + promisc = 1; + fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); } + if (!pkt || maxlen < 2) + return 0; + return recvfrom(fd, pkt, maxlen, 0, (struct sockaddr *)&from, &from_len); return -1; } @@ -183,21 +181,12 @@ void hdrvc_args(int *argc, char *argv[], const char *def_if) prg_name = argv[0]; for (i = 1; i < ac-1; i++) { if (!strcmp(argv[i], "-i")) { - kernel_mode = 1; if_name = argv[i+1]; ac -= 2; if (i < ac) memmove(argv+i, argv+i+2, (ac-i) * sizeof(void *)); i--; - } else - if (!strcmp(argv[i], "-u")) { - kernel_mode = 0; - if_name = argv[i+1]; - ac -= 2; - if (i < ac) - memmove(argv+i, argv+i+2, (ac-i) * sizeof(void *)); - i--; - } + } } *argc = ac; } @@ -209,38 +198,40 @@ void hdrvc_init(void) key_t k; static struct ifreq ifr; - if (kernel_mode) { - strcpy(ifr_h.ifr_name, if_name); + strcpy(ifr_h.ifr_name, if_name); /* first try to use AF_PACKET */ - if ((fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_AX25))) < 0 - || ioctl(fd, SIOCGIFINDEX, &ifr_h) < 0) { - if (fd >= 0) - close(fd); - afpacket = 0; - if ((fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_AX25))) < 0) { - fprintf(stderr, "%s: Error %s (%i), cannot open %s\n", prg_name, - strerror(errno), errno, if_name); - exit(-1); - } - if (ioctl(fd, SIOCGIFFLAGS, &ifr_h) < 0) { - fprintf(stderr, "%s: Error %s (%i), cannot ioctl SIOCGIFFLAGS %s\n", prg_name, - strerror(errno), errno, if_name); - exit(-1); - } - } - strcpy(ifr.ifr_name, if_name); - if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 ) { - fprintf(stderr, "%s: Error %s (%i), cannot ioctl SIOCGIFHWADDR %s\n", prg_name, + if ((fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_AX25))) < 0 + || ioctl(fd, SIOCGIFINDEX, &ifr_h) < 0) { + if (fd >= 0) + close(fd); + afpacket = 0; + if ((fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_AX25))) < 0) { + fprintf(stderr, "%s: Error %s (%i), cannot open %s\n", + prg_name, strerror(errno), errno, if_name); exit(-1); } - if (ifr.ifr_hwaddr.sa_family != ARPHRD_AX25) { - fprintf(stderr, "%s: Error, interface %s not AX25 (%i)\n", prg_name, - if_name, ifr.ifr_hwaddr.sa_family); + if (ioctl(fd, SIOCGIFFLAGS, &ifr_h) < 0) { + fprintf(stderr, "%s: Error %s (%i), cannot ioctl SIOCGIFFLAGS %s\n", + prg_name, + strerror(errno), errno, if_name); exit(-1); } - return; } + strcpy(ifr.ifr_name, if_name); + if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 ) { + fprintf(stderr, "%s: Error %s (%i), cannot ioctl SIOCGIFHWADDR %s\n", + prg_name, + strerror(errno), errno, if_name); + exit(-1); + } + if (ifr.ifr_hwaddr.sa_family != ARPHRD_AX25) { + fprintf(stderr, "%s: Error, interface %s not AX25 (%i)\n", + prg_name, + if_name, ifr.ifr_hwaddr.sa_family); + exit(-1); + } + return; k = ftok(if_name, USERSM_KEY_PROJ); if (k == (key_t)-1) { fprintf(stderr, "%s: Error %s (%i), cannot ftok on %s\n", prg_name, @@ -293,10 +284,8 @@ int hdrvc_hdlcdrv_ioctl(int cmd, struct hdlcdrv_ioctl *par) { struct ifreq ifr = ifr_h; - if (!kernel_mode) { - errno = EINVAL; - return -1; - } + errno = EINVAL; + return -1; ifr.ifr_data = (caddr_t)par; par->cmd = cmd; return ioctl(fd, SIOCDEVPRIVATE, &ifr); @@ -308,10 +297,8 @@ int hdrvc_sm_ioctl(int cmd, struct sm_ioctl *par) { struct ifreq ifr = ifr_h; - if (!kernel_mode) { - errno = EINVAL; - return -1; - } + errno = EINVAL; + return -1; ifr.ifr_data = (caddr_t)par; par->cmd = cmd; return ioctl(fd, SIOCDEVPRIVATE, &ifr); @@ -323,10 +310,8 @@ int hdrvc_baycom_ioctl(int cmd, struct baycom_ioctl *par) { struct ifreq ifr = ifr_h; - if (!kernel_mode) { - errno = EINVAL; - return -1; - } + errno = EINVAL; + return -1; ifr.ifr_data = (caddr_t)par; par->cmd = cmd; return ioctl(fd, SIOCDEVPRIVATE, &ifr); @@ -338,14 +323,12 @@ unsigned int hdrvc_get_ifflags(void) { struct ifreq ifr; - if (kernel_mode) { - memcpy(&ifr, &ifr_h, sizeof(ifr)); - if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { - perror("ioctl: SIOCGIFFLAGS"); - exit(-1); - } - return ifr.ifr_flags; + memcpy(&ifr, &ifr_h, sizeof(ifr)); + if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { + perror("ioctl: SIOCGIFFLAGS"); + exit(-1); } + return ifr.ifr_flags; return IFF_UP | IFF_RUNNING; } @@ -361,12 +344,10 @@ int hdrvc_diag(struct sm_diag_data *diag) errno = EINVAL; return -1; } - if (kernel_mode) { - memcpy(&smi.data.diag, diag, sizeof(smi.data.diag)); - ret = hdrvc_sm_ioctl(SMCTL_DIAGNOSE, &smi); - memcpy(diag, &smi.data.diag, sizeof(smi.data.diag)); - return ret; - } + memcpy(&smi.data.diag, diag, sizeof(smi.data.diag)); + ret = hdrvc_sm_ioctl(SMCTL_DIAGNOSE, &smi); + memcpy(diag, &smi.data.diag, sizeof(smi.data.diag)); + return ret; msg.hdr.type = USERSM_CMD_REQ_DIAG; msg.hdr.channel = 0; msg.data.diag.mode = diag->mode; @@ -397,12 +378,10 @@ int hdrvc_get_samples(void) int ret; struct hdlcdrv_ioctl bi; - if (kernel_mode) { - ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETSAMPLES, &bi); - if (ret < 0) - return ret; - return bi.data.bits & 0xff; - } + ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETSAMPLES, &bi); + if (ret < 0) + return ret; + return bi.data.bits & 0xff; errno = EAGAIN; return -1; } @@ -414,12 +393,10 @@ int hdrvc_get_bits(void) int ret; struct hdlcdrv_ioctl bi; - if (kernel_mode) { - ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETBITS, &bi); - if (ret < 0) - return ret; - return bi.data.bits & 0xff; - } + ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETBITS, &bi); + if (ret < 0) + return ret; + return bi.data.bits & 0xff; errno = EAGAIN; return -1; } @@ -432,20 +409,18 @@ int hdrvc_get_channel_access_param(struct hdrvc_channel_params *par) int ret; struct usersmmsg msg; - if (kernel_mode) { - if ((ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETCHANNELPAR, &hi)) < 0) - return ret; - if (!par) { - errno = EINVAL; - return -1; - } - par->tx_delay = hi.data.cp.tx_delay; - par->tx_tail = hi.data.cp.tx_tail; - par->slottime = hi.data.cp.slottime; - par->ppersist = hi.data.cp.ppersist; - par->fulldup = hi.data.cp.fulldup; - return 0; + if ((ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETCHANNELPAR, &hi)) < 0) + return ret; + if (!par) { + errno = EINVAL; + return -1; } + par->tx_delay = hi.data.cp.tx_delay; + par->tx_tail = hi.data.cp.tx_tail; + par->slottime = hi.data.cp.slottime; + par->ppersist = hi.data.cp.ppersist; + par->fulldup = hi.data.cp.fulldup; + return 0; msg.hdr.type = USERSM_CMD_REQ_CHACCESS_PAR; msg.hdr.channel = 0; hdrvc_sendmsg(&msg, 0); @@ -471,18 +446,16 @@ int hdrvc_set_channel_access_param(struct hdrvc_channel_params par) int ret; struct usersmmsg msg; - if (kernel_mode) { - struct hdlcdrv_ioctl hi; + struct hdlcdrv_ioctl hi; - hi.data.cp.tx_delay = par.tx_delay; - hi.data.cp.tx_tail = par.tx_tail; - hi.data.cp.slottime = par.slottime; - hi.data.cp.ppersist = par.ppersist; - hi.data.cp.fulldup = par.fulldup; - if ((ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_SETCHANNELPAR, &hi)) < 0) - return ret; - return 0; - } + hi.data.cp.tx_delay = par.tx_delay; + hi.data.cp.tx_tail = par.tx_tail; + hi.data.cp.slottime = par.slottime; + hi.data.cp.ppersist = par.ppersist; + hi.data.cp.fulldup = par.fulldup; + if ((ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_SETCHANNELPAR, &hi)) < 0) + return ret; + return 0; msg.hdr.type = USERSM_CMD_SET_CHACCESS_PAR; msg.hdr.channel = 0; msg.data.cp.tx_delay = par.tx_delay; @@ -501,10 +474,8 @@ int hdrvc_calibrate(int calib) struct hdlcdrv_ioctl bhi; struct usersmmsg msg; - if (kernel_mode) { - bhi.data.calibrate = calib; - return hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_CALIBRATE, &bhi); - } + bhi.data.calibrate = calib; + return hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_CALIBRATE, &bhi); msg.hdr.type = USERSM_CMD_CALIBRATE; msg.hdr.channel = 0; msg.data.calib = calib; @@ -524,19 +495,17 @@ int hdrvc_get_channel_state(struct hdrvc_channel_state *st) errno = EINVAL; return -1; } - if (kernel_mode) { - ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETSTAT, &bhi); - if (ret >= 0) { - st->ptt = bhi.data.cs.ptt; - st->dcd = bhi.data.cs.dcd; - st->ptt_keyed = bhi.data.cs.ptt_keyed; - st->tx_packets = bhi.data.cs.tx_packets; - st->tx_errors = bhi.data.cs.tx_errors; - st->rx_packets = bhi.data.cs.rx_packets; - st->rx_errors = bhi.data.cs.rx_errors; - } - return ret; - } + ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETSTAT, &bhi); + if (ret >= 0) { + st->ptt = bhi.data.cs.ptt; + st->dcd = bhi.data.cs.dcd; + st->ptt_keyed = bhi.data.cs.ptt_keyed; + st->tx_packets = bhi.data.cs.tx_packets; + st->tx_errors = bhi.data.cs.tx_errors; + st->rx_packets = bhi.data.cs.rx_packets; + st->rx_errors = bhi.data.cs.rx_errors; + } + return ret; msg.hdr.type = USERSM_CMD_REQ_CHANNELSTATE; msg.hdr.channel = 0; hdrvc_sendmsg(&msg, 0); @@ -573,25 +542,24 @@ int hdrvc_diag2(unsigned int mode, unsigned int flags, short *data, errno = EINVAL; return -1; } - if (kernel_mode) { - struct sm_ioctl smi; - static unsigned int modeconvsm[4] = { - SM_DIAGMODE_OFF, SM_DIAGMODE_INPUT, SM_DIAGMODE_DEMOD, SM_DIAGMODE_CONSTELLATION - }; - - smi.data.diag.mode = modeconvsm[mode]; - smi.data.diag.flags = (flags & HDRVC_DIAGFLAG_DCDGATE) ? SM_DIAGFLAG_DCDGATE : 0; - smi.data.diag.samplesperbit = 0; - smi.data.diag.datalen = maxdatalen; - smi.data.diag.data = data; - if ((ret = hdrvc_sm_ioctl(SMCTL_DIAGNOSE, &smi)) < 0) - return ret; - if (samplesperbit) - *samplesperbit = smi.data.diag.samplesperbit; - if (smi.data.diag.mode != modeconvsm[mode] || !(smi.data.diag.flags & SM_DIAGFLAG_VALID)) - return 0; - return smi.data.diag.datalen; - } + struct sm_ioctl smi; + static unsigned int modeconvsm[4] = { + SM_DIAGMODE_OFF, SM_DIAGMODE_INPUT, SM_DIAGMODE_DEMOD, + SM_DIAGMODE_CONSTELLATION + }; + + smi.data.diag.mode = modeconvsm[mode]; + smi.data.diag.flags = (flags & HDRVC_DIAGFLAG_DCDGATE) ? SM_DIAGFLAG_DCDGATE : 0; + smi.data.diag.samplesperbit = 0; + smi.data.diag.datalen = maxdatalen; + smi.data.diag.data = data; + if ((ret = hdrvc_sm_ioctl(SMCTL_DIAGNOSE, &smi)) < 0) + return ret; + if (samplesperbit) + *samplesperbit = smi.data.diag.samplesperbit; + if (smi.data.diag.mode != modeconvsm[mode] || !(smi.data.diag.flags & SM_DIAGFLAG_VALID)) + return 0; + return smi.data.diag.datalen; msg.hdr.type = USERSM_CMD_REQ_DIAG; msg.hdr.channel = 0; msg.data.diag.mode = modeconvusersm[mode]; @@ -623,15 +591,13 @@ int hdrvc_get_driver_name(char *buf, int bufsz) int ret; struct usersmmsg msg; - if (kernel_mode) { - struct hdlcdrv_ioctl bhi; + struct hdlcdrv_ioctl bhi; - ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_DRIVERNAME, &bhi); - if (ret < 0) - return ret; - strncpy(buf, bhi.data.modename, bufsz); - return 0; - } + ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_DRIVERNAME, &bhi); + if (ret < 0) + return ret; + strncpy(buf, bhi.data.modename, bufsz); + return 0; msg.hdr.type = USERSM_CMD_REQ_DRVNAME; msg.hdr.channel = 0; hdrvc_sendmsg(&msg, 0); @@ -656,15 +622,13 @@ int hdrvc_get_mode_name(char *buf, int bufsz) int ret; struct usersmmsg msg; - if (kernel_mode) { - struct hdlcdrv_ioctl bhi; + struct hdlcdrv_ioctl bhi; - ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETMODE, &bhi); - if (ret < 0) - return ret; - strncpy(buf, bhi.data.modename, bufsz); - return 0; - } + ret = hdrvc_hdlcdrv_ioctl(HDLCDRVCTL_GETMODE, &bhi); + if (ret < 0) + return ret; + strncpy(buf, bhi.data.modename, bufsz); + return 0; msg.hdr.type = USERSM_CMD_REQ_DRVMODE; msg.hdr.channel = 0; hdrvc_sendmsg(&msg, 0); -- cgit v1.2.3