diff options
Diffstat (limited to 'isisd/isis_pfpacket.c')
| -rw-r--r-- | isisd/isis_pfpacket.c | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/isisd/isis_pfpacket.c b/isisd/isis_pfpacket.c index fd82b85f51..2f6526bc5e 100644 --- a/isisd/isis_pfpacket.c +++ b/isisd/isis_pfpacket.c @@ -31,6 +31,7 @@ #include "network.h" #include "stream.h" #include "if.h" +#include "lib_errors.h" #include "isisd/dict.h" #include "isisd/isis_constants.h" @@ -184,35 +185,30 @@ int isis_sock_init(struct isis_circuit *circuit) { int retval = ISIS_OK; - if (isisd_privs.change(ZPRIVS_RAISE)) - zlog_err("%s: could not raise privs, %s", __func__, - safe_strerror(errno)); + frr_elevate_privs(&isisd_privs) { - retval = open_packet_socket(circuit); + retval = open_packet_socket(circuit); - if (retval != ISIS_OK) { - zlog_warn("%s: could not initialize the socket", __func__); - goto end; - } + if (retval != ISIS_OK) { + zlog_warn("%s: could not initialize the socket", + __func__); + break; + } /* Assign Rx and Tx callbacks are based on real if type */ - if (if_is_broadcast(circuit->interface)) { - circuit->tx = isis_send_pdu_bcast; - circuit->rx = isis_recv_pdu_bcast; - } else if (if_is_pointopoint(circuit->interface)) { - circuit->tx = isis_send_pdu_p2p; - circuit->rx = isis_recv_pdu_p2p; - } else { - zlog_warn("isis_sock_init(): unknown circuit type"); - retval = ISIS_WARNING; - goto end; + if (if_is_broadcast(circuit->interface)) { + circuit->tx = isis_send_pdu_bcast; + circuit->rx = isis_recv_pdu_bcast; + } else if (if_is_pointopoint(circuit->interface)) { + circuit->tx = isis_send_pdu_p2p; + circuit->rx = isis_recv_pdu_p2p; + } else { + zlog_warn("isis_sock_init(): unknown circuit type"); + retval = ISIS_WARNING; + break; + } } -end: - if (isisd_privs.change(ZPRIVS_LOWER)) - zlog_err("%s: could not lower privs, %s", __func__, - safe_strerror(errno)); - return retval; } |
