BOOL cg_socket_setmulticastttl(CgSocket *sock, int ttl) { int sockOptRet; int ttl_; unsigned int len=0; cg_log_debug_l4("Entering...\n"); #if defined(BTRON) || (defined(TENGINE) && !defined(CG_TENGINE_NET_KASAGO)) sockOptRet = so_setsockopt(sock->id, IPPROTO_IP, IP_MULTICAST_TTL, (B *)&ttl, sizeof(ttl)); #elif defined(TENGINE) && defined(CG_TENGINE_NET_KASAGO) sockOptRet = ka_setsockopt(sock->id, IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&ttl, sizeof(ttl)); #elif defined (ITRON) /**** Not Implemented for NORTi ***/ sockOptRet = -1; #elif defined (WIN32) sockOptRet = setsockopt(sock->id, IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&ttl, sizeof(ttl)); #else cg_log_debug("Setting multicast time to live to %d\n", ttl); sockOptRet = setsockopt(sock->id, IPPROTO_IP, IP_MULTICAST_TTL, (const unsigned char *)&ttl, sizeof(ttl)); if (sockOptRet != 0) { cg_log_debug("setsockopt() failed with errno %d: %s, fd:%d\n", errno, strerror(errno),sock->id); } else { len = sizeof(ttl_); getsockopt(sock->id, IPPROTO_IP, IP_MULTICAST_TTL, &ttl_, (socklen_t*)&len); cg_log_debug("Multicast time to live is %i\n", ttl_); } #endif cg_log_debug_l4("Leaving...\n"); return (sockOptRet == 0) ? TRUE : FALSE; }
int nfs_boot_enbroadcast(struct socket *so) { int32_t on; on = 1; return (so_setsockopt(NULL, so, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on))); }
int nfs_boot_setrecvtimo(struct socket *so) { struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; return (so_setsockopt(NULL, so, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))); }
BOOL cg_socket_setreuseaddress(CgSocket *sock, BOOL flag) { int sockOptRet; #if defined(BTRON) || (defined(TENGINE) && !defined(CG_TENGINE_NET_KASAGO)) B optval #elif defined(TENGINE) && defined(CG_TENGINE_NET_KASAGO) int optval; #elif defined (WIN32) BOOL optval; #else int optval; #endif cg_log_debug_l4("Entering...\n"); #if defined(BTRON) || (defined(TENGINE) && !defined(CG_TENGINE_NET_KASAGO)) optval = (flag == TRUE) ? 1 : 0; sockOptRet = so_setsockopt(sock->id, SOL_SOCKET, SO_REUSEADDR, (B *)&optval, sizeof(optval)); #elif defined(TENGINE) && defined(CG_TENGINE_NET_KASAGO) optval = (flag == TRUE) ? 1 : 0; sockOptRet = ka_setsockopt(sock->id, SOL_SOCKET, SO_REUSEADDR, (const char *)&optval, sizeof(optval)); #elif defined (ITRON) /**** Not Implemented for NORTi ***/ sockOptRet = -1; #elif defined (WIN32) optval = (flag == TRUE) ? 1 : 0; sockOptRet = setsockopt(sock->id, SOL_SOCKET, SO_REUSEADDR, (const char *)&optval, sizeof(optval)); #else optval = (flag == TRUE) ? 1 : 0; sockOptRet = setsockopt(sock->id, SOL_SOCKET, SO_REUSEADDR, (const char *)&optval, sizeof(optval)); #if defined(USE_SO_REUSEPORT) || defined(TARGET_OS_MAC) || defined(TARGET_OS_IPHONE) if (sockOptRet == 0) { sockOptRet = setsockopt(sock->id, SOL_SOCKET, SO_REUSEPORT, (const char *)&optval, sizeof(optval)); } #endif #endif cg_log_debug_l4("Leaving...\n"); return (sockOptRet == 0) ? TRUE : FALSE; }
int rump_netconfig_auto_ipv6(const char *ifname) { struct ifnet *ifp; int ifindex; struct socket *rsso = NULL; int rv = 0; int hoplimit = 255; struct mbuf *m_nam = NULL, *m_outbuf = NULL; struct sockaddr_in6 *sin6; char *buf; struct nd_router_solicit rs; struct nd_opt_hdr opt; ifp = ifunit(ifname); if (ifp == NULL) { rv = ENXIO; goto out; } if (ifp->if_sadl->sdl_type != IFT_ETHER) { rv = EINVAL; goto out; } rv = socreate(PF_INET6, &rsso, SOCK_RAW, IPPROTO_ICMPV6, curlwp, NULL); if (rv != 0) goto out; ifindex = ifp->if_index; rv = so_setsockopt(curlwp, rsso, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifindex, sizeof ifindex); if (rv != 0) goto out; rv = so_setsockopt(curlwp, rsso, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hoplimit, sizeof hoplimit); if (rv != 0) goto out; m_nam = m_get(M_WAIT, MT_SONAME); sin6 = mtod(m_nam, struct sockaddr_in6 *); sin6->sin6_len = m_nam->m_len = sizeof (*sin6); sin6->sin6_family = AF_INET6; netconfig_inet_pton6("ff02::2", &sin6->sin6_addr); #define rslen (sizeof rs + sizeof opt + ETHER_ADDR_LEN) CTASSERT(rslen <= MCLBYTES); m_outbuf = m_gethdr(M_WAIT, MT_DATA); m_clget(m_outbuf, M_WAIT); m_outbuf->m_pkthdr.len = m_outbuf->m_len = rslen; #if __NetBSD_Prereq__(7,99,31) m_set_rcvif(m_outbuf, NULL); #else m_outbuf->m_pkthdr.rcvif = NULL; #endif #undef rslen buf = mtod(m_outbuf, char *); memset(&rs, 0, sizeof rs); rs.nd_rs_type = ND_ROUTER_SOLICIT; memset(&opt, 0, sizeof opt); opt.nd_opt_type = ND_OPT_SOURCE_LINKADDR; opt.nd_opt_len = 1; /* units of 8 octets */ memcpy(buf, &rs, sizeof rs); buf += sizeof rs; memcpy(buf, &opt, sizeof opt); buf += sizeof opt; memcpy(buf, CLLADDR(ifp->if_sadl), ETHER_ADDR_LEN); ip6_accept_rtadv = 1; rv = rump_netconfig_ifup(ifname); if (rv != 0) goto out; #if __NetBSD_Prereq__(7,99,12) rv = (*rsso->so_send)(rsso, (struct sockaddr *)sin6, NULL, m_outbuf, NULL, 0, curlwp); #else rv = (*rsso->so_send)(rsso, m_nam, NULL, m_outbuf, NULL, 0, curlwp); #endif if (rv == 0) /* *(so_send)() takes ownership of m_outbuf on success */ m_outbuf = NULL; else goto out; rv = 0; out: if (m_nam) m_freem(m_nam); if (m_outbuf) m_freem(m_outbuf); if (rsso) soclose(rsso); return rv; }
int ultrix_sys_setsockopt(struct lwp *l, const struct ultrix_sys_setsockopt_args *uap, register_t *retval) { struct sockopt sopt; struct socket *so; int error; struct sys_setsockopt_args ap; SCARG(&ap, s) = SCARG(uap, s); SCARG(&ap, level) = SCARG(uap, level); SCARG(&ap, name) = SCARG(uap, name); SCARG(&ap, val) = SCARG(uap, val); SCARG(&ap, valsize) = SCARG(uap, valsize); /* fd_getsock() will use the descriptor for us */ if ((error = fd_getsock(SCARG(&ap, s), &so)) != 0) return error; #define SO_DONTLINGER (~SO_LINGER) if (SCARG(&ap, name) == SO_DONTLINGER) { struct linger lg; lg.l_onoff = 0; error = so_setsockopt(l, so, SCARG(&ap, level), SO_LINGER, &lg, sizeof(lg)); goto out; } if (SCARG(&ap, level) == IPPROTO_IP) { #define EMUL_IP_MULTICAST_IF 2 #define EMUL_IP_MULTICAST_TTL 3 #define EMUL_IP_MULTICAST_LOOP 4 #define EMUL_IP_ADD_MEMBERSHIP 5 #define EMUL_IP_DROP_MEMBERSHIP 6 static const int ipoptxlat[] = { IP_MULTICAST_IF, IP_MULTICAST_TTL, IP_MULTICAST_LOOP, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP }; if (SCARG(&ap, name) >= EMUL_IP_MULTICAST_IF && SCARG(&ap, name) <= EMUL_IP_DROP_MEMBERSHIP) { SCARG(&ap, name) = ipoptxlat[SCARG(&ap, name) - EMUL_IP_MULTICAST_IF]; } } if (SCARG(&ap, valsize) > MLEN) { error = EINVAL; goto out; } sockopt_init(&sopt, SCARG(&ap, level), SCARG(&ap, name), SCARG(&ap, valsize)); if (SCARG(&ap, val)) { error = copyin(SCARG(&ap, val), sopt.sopt_data, (u_int)SCARG(&ap, valsize)); } if (error == 0) error = sosetopt(so, &sopt); sockopt_destroy(&sopt); out: fd_putfile(SCARG(uap, s)); return error; }
static int nb_setsockopt_int(struct socket *so, int level, int name, int val) { return so_setsockopt(NULL, so, level, name, &val, sizeof(val)); /* XXX */ }