#include "privs.h"
#include "table.h"
#include "vty.h"
+#include "lib_errors.h"
#include "eigrpd/eigrp_structs.h"
#include "eigrpd/eigrpd.h"
int eigrp_sock_init(void)
{
int eigrp_sock;
- int ret, hincl = 1;
+ int ret;
+#ifdef IP_HDRINCL
+ int hincl = 1;
+#endif
if (eigrpd_privs.change(ZPRIVS_RAISE))
- zlog_err("eigrp_sock_init: could not raise privs, %s",
- safe_strerror(errno));
+ flog_err(LIB_ERR_PRIVILEGES,
+ "eigrp_sock_init: could not raise privs, %s",
+ safe_strerror(errno));
eigrp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_EIGRPIGP);
if (eigrp_sock < 0) {
int save_errno = errno;
if (eigrpd_privs.change(ZPRIVS_LOWER))
- zlog_err("eigrp_sock_init: could not lower privs, %s",
- safe_strerror(errno));
- zlog_err("eigrp_read_sock_init: socket: %s",
- safe_strerror(save_errno));
+ flog_err(LIB_ERR_PRIVILEGES,
+ "eigrp_sock_init: could not lower privs, %s",
+ safe_strerror(errno));
+ flog_err_sys(LIB_ERR_SOCKET, "eigrp_read_sock_init: socket: %s",
+ safe_strerror(save_errno));
exit(1);
}
if (ret < 0) {
int save_errno = errno;
if (eigrpd_privs.change(ZPRIVS_LOWER))
- zlog_err("eigrp_sock_init: could not lower privs, %s",
- safe_strerror(errno));
+ flog_err(LIB_ERR_PRIVILEGES,
+ "eigrp_sock_init: could not lower privs, %s",
+ safe_strerror(errno));
zlog_warn("Can't set IP_HDRINCL option for fd %d: %s",
eigrp_sock, safe_strerror(save_errno));
}
if (ret < 0) {
int save_errno = errno;
if (eigrpd_privs.change(ZPRIVS_LOWER))
- zlog_err("eigrpd_sock_init: could not lower privs, %s",
- safe_strerror(errno));
+ flog_err(LIB_ERR_PRIVILEGES,
+ "eigrpd_sock_init: could not lower privs, %s",
+ safe_strerror(errno));
zlog_warn("can't set sockopt IP_TOS %d to socket %d: %s", tos,
eigrp_sock, safe_strerror(save_errno));
close(eigrp_sock); /* Prevent sd leak. */
zlog_warn("Can't set pktinfo option for fd %d", eigrp_sock);
if (eigrpd_privs.change(ZPRIVS_LOWER)) {
- zlog_err("eigrp_sock_init: could not lower privs, %s",
- safe_strerror(errno));
+ flog_err(LIB_ERR_PRIVILEGES,
+ "eigrp_sock_init: could not lower privs, %s",
+ safe_strerror(errno));
}
return eigrp_sock;
/* Check if any work has to be done at all. */
if (eigrp->maxsndbuflen >= buflen)
return;
- if (eigrpd_privs.change(ZPRIVS_RAISE))
- zlog_err("%s: could not raise privs, %s", __func__,
- safe_strerror(errno));
+ frr_elevate_privs(&eigrpd_privs) {
/* Now we try to set SO_SNDBUF to what our caller has requested
* (the MTU of a newly added interface). However, if the OS has
* may allocate more buffer space, than requested, this isn't
* a error.
*/
- setsockopt_so_sendbuf(eigrp->fd, buflen);
- newbuflen = getsockopt_so_sendbuf(eigrp->fd);
- if (newbuflen < 0 || newbuflen < (int)buflen)
- zlog_warn("%s: tried to set SO_SNDBUF to %u, but got %d",
- __func__, buflen, newbuflen);
- if (newbuflen >= 0)
- eigrp->maxsndbuflen = (unsigned int)newbuflen;
- else
- zlog_warn("%s: failed to get SO_SNDBUF", __func__);
- if (eigrpd_privs.change(ZPRIVS_LOWER))
- zlog_err("%s: could not lower privs, %s", __func__,
- safe_strerror(errno));
+ setsockopt_so_sendbuf(eigrp->fd, buflen);
+ newbuflen = getsockopt_so_sendbuf(eigrp->fd);
+ if (newbuflen < 0 || newbuflen < (int)buflen)
+ zlog_warn("%s: tried to set SO_SNDBUF to %u, but got %d",
+ __func__, buflen, newbuflen);
+ if (newbuflen >= 0)
+ eigrp->maxsndbuflen = (unsigned int)newbuflen;
+ else
+ zlog_warn("%s: failed to get SO_SNDBUF", __func__);
+ }
}
int eigrp_if_ipmulticast(struct eigrp *top, struct prefix *p,
unsigned int ifindex)
{
- u_char val;
+ uint8_t val;
int ret, len;
val = 0;
return 1;
}
-u_int32_t eigrp_calculate_metrics(struct eigrp *eigrp,
- struct eigrp_metrics metric)
+uint32_t eigrp_calculate_metrics(struct eigrp *eigrp,
+ struct eigrp_metrics metric)
{
uint64_t temp_metric;
temp_metric = 0;
+ eigrp->k_values[3]);
if (temp_metric <= EIGRP_MAX_METRIC)
- return (u_int32_t)temp_metric;
+ return (uint32_t)temp_metric;
else
return EIGRP_MAX_METRIC;
}
-u_int32_t eigrp_calculate_total_metrics(struct eigrp *eigrp,
- struct eigrp_nexthop_entry *entry)
+uint32_t eigrp_calculate_total_metrics(struct eigrp *eigrp,
+ struct eigrp_nexthop_entry *entry)
{
struct eigrp_interface *ei = entry->ei;
+ (uint64_t)eigrp_delay_to_scaled(ei->params.delay);
entry->total_metric.delay = temp_delay > EIGRP_MAX_METRIC
? EIGRP_MAX_METRIC
- : (u_int32_t)temp_delay;
+ : (uint32_t)temp_delay;
- u_int32_t bw = eigrp_bandwidth_to_scaled(ei->params.bandwidth);
+ uint32_t bw = eigrp_bandwidth_to_scaled(ei->params.bandwidth);
entry->total_metric.bandwidth = entry->total_metric.bandwidth > bw
? bw
: entry->total_metric.bandwidth;
return eigrp_calculate_metrics(eigrp, entry->total_metric);
}
-u_char eigrp_metrics_is_same(struct eigrp_metrics metric1,
- struct eigrp_metrics metric2)
+uint8_t eigrp_metrics_is_same(struct eigrp_metrics metric1,
+ struct eigrp_metrics metric2)
{
if ((metric1.bandwidth == metric2.bandwidth)
&& (metric1.delay == metric2.delay)