sock = socket(su->sa.sa_family, SOCK_STREAM, 0);
if (sock < 0) {
char buf[SU_ADDRSTRLEN];
- zlog_warn("Can't make socket for %s : %s",
- sockunion_log(su, buf, SU_ADDRSTRLEN),
- safe_strerror(errno));
+ flog_err(EC_LIB_SOCKET, "Can't make socket for %s : %s",
+ sockunion_log(su, buf, SU_ADDRSTRLEN),
+ safe_strerror(errno));
return -1;
}
sock = socket(su->sa.sa_family, SOCK_STREAM, 0);
if (sock < 0)
- zlog_warn("can't make socket sockunion_stream_socket");
+ flog_err(EC_LIB_SOCKET,
+ "can't make socket sockunion_stream_socket");
return sock;
}
ret = bind(sock, (struct sockaddr *)su, size);
if (ret < 0) {
char buf[SU_ADDRSTRLEN];
- zlog_warn("can't bind socket for %s : %s",
- sockunion_log(su, buf, SU_ADDRSTRLEN),
- safe_strerror(errno));
+ flog_err(EC_LIB_SOCKET, "can't bind socket for %s : %s",
+ sockunion_log(su, buf, SU_ADDRSTRLEN),
+ safe_strerror(errno));
}
return ret;
ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&on,
sizeof(on));
if (ret < 0) {
- zlog_warn("can't set sockopt SO_REUSEADDR to socket %d", sock);
+ flog_err(EC_LIB_SOCKET,
+ "can't set sockopt SO_REUSEADDR to socket %d", sock);
return -1;
}
return 0;
ret = setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (void *)&on,
sizeof(on));
if (ret < 0) {
- zlog_warn("can't set sockopt SO_REUSEPORT to socket %d", sock);
+ flog_err(EC_LIB_SOCKET,
+ "can't set sockopt SO_REUSEPORT to socket %d", sock);
return -1;
}
return 0;
ret = setsockopt(sock, IPPROTO_IP, IP_TTL, (void *)&ttl,
sizeof(int));
if (ret < 0) {
- zlog_warn("can't set sockopt IP_TTL %d to socket %d",
- ttl, sock);
+ flog_err(EC_LIB_SOCKET,
+ "can't set sockopt IP_TTL %d to socket %d",
+ ttl, sock);
return -1;
}
return 0;
ret = setsockopt(sock, IPPROTO_IPV6, IPV6_UNICAST_HOPS,
(void *)&ttl, sizeof(int));
if (ret < 0) {
- zlog_warn(
+ flog_err(
+ EC_LIB_SOCKET,
"can't set sockopt IPV6_UNICAST_HOPS %d to socket %d",
ttl, sock);
return -1;
* Which on linux is a no-op since it is enabled by
* default and on BSD it uses TCP_NOPUSH to do
* the same thing( which it was not configured to
- * use). This cleanup of the api occured on 8/1/17
+ * use). This cleanup of the api occurred on 8/1/17
* I imagine if after more than 1 year of no-one
* complaining, and a major upgrade release we
* can deprecate and remove this function call
#ifdef SO_MARK
int ret;
- if (cap->change(ZPRIVS_RAISE))
- zlog_ferr(LIB_ERR_PRIVILEGES,
- "routing_socket: Can't raise privileges");
-
- ret = setsockopt(sock, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
-
- if (cap->change(ZPRIVS_LOWER))
- zlog_ferr(LIB_ERR_PRIVILEGES,
- "routing_socket: Can't lower privileges");
-
+ frr_elevate_privs(cap) {
+ ret = setsockopt(sock, SOL_SOCKET, SO_MARK, &mark,
+ sizeof(mark));
+ }
return ret;
#else
return 0;
int ret = setsockopt(sock, IPPROTO_IP, IP_MINTTL, &minttl,
sizeof(minttl));
if (ret < 0)
- zlog_warn(
+ flog_err(
+ EC_LIB_SOCKET,
"can't set sockopt IP_MINTTL to %d on socket %d: %s",
minttl, sock, safe_strerror(errno));
return ret;
int ret = setsockopt(sock, IPPROTO_IPV6, IPV6_MINHOPCOUNT,
&minttl, sizeof(minttl));
if (ret < 0)
- zlog_warn(
+ flog_err(
+ EC_LIB_SOCKET,
"can't set sockopt IPV6_MINHOPCOUNT to %d on socket %d: %s",
minttl, sock, safe_strerror(errno));
return ret;
ret = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&on,
sizeof(int));
if (ret < 0) {
- zlog_warn(
- "can't set sockopt IPV6_V6ONLY "
- "to socket %d",
- sock);
+ flog_err(EC_LIB_SOCKET,
+ "can't set sockopt IPV6_V6ONLY "
+ "to socket %d",
+ sock);
return -1;
}
return 0;
ret = getsockname(fd, (struct sockaddr *)&name, &len);
if (ret < 0) {
- zlog_warn("Can't get local address and port by getsockname: %s",
- safe_strerror(errno));
+ flog_err(EC_LIB_SOCKET,
+ "Can't get local address and port by getsockname: %s",
+ safe_strerror(errno));
return NULL;
}
len = sizeof name;
ret = getpeername(fd, (struct sockaddr *)&name, &len);
if (ret < 0) {
- zlog_warn("Can't get remote address and port: %s",
- safe_strerror(errno));
+ flog_err(EC_LIB_SOCKET, "Can't get remote address and port: %s",
+ safe_strerror(errno));
return NULL;
}