/*** * rt_packet_ioctl */ static int rt_packet_ioctl(struct rtdm_fd *fd, unsigned int request, void *arg) { struct rtsocket *sock = rtdm_fd_to_private(fd); struct _rtdm_setsockaddr_args *setaddr = arg; struct _rtdm_getsockaddr_args *getaddr = arg; /* fast path for common socket IOCTLs */ if (_IOC_TYPE(request) == RTIOC_TYPE_NETWORK) return rt_socket_common_ioctl(fd, request, arg); switch (request) { case _RTIOC_BIND: return rt_packet_bind(sock, setaddr->addr, setaddr->addrlen); case _RTIOC_GETSOCKNAME: return rt_packet_getsockname(sock, getaddr->addr, getaddr->addrlen); default: return rt_socket_if_ioctl(fd, request, arg); } }
/*** * rt_packet_ioctl */ int rt_packet_ioctl(struct rtdm_dev_context *sockctx, rtdm_user_info_t *user_info, int request, void *arg) { struct rtsocket *sock = (struct rtsocket *)&sockctx->dev_private; struct _rtdm_setsockaddr_args *setaddr = arg; struct _rtdm_getsockaddr_args *getaddr = arg; /* fast path for common socket IOCTLs */ if (_IOC_TYPE(request) == RTIOC_TYPE_NETWORK) return rt_socket_common_ioctl(sockctx, user_info, request, arg); switch (request) { case _RTIOC_BIND: return rt_packet_bind(sock, setaddr->addr, setaddr->addrlen); case _RTIOC_GETSOCKNAME: return rt_packet_getsockname(sock, getaddr->addr, getaddr->addrlen); default: return rt_socket_if_ioctl(sockctx, user_info, request, arg); } }