Ejemplo n.º 1
0
/*
 * Create the socket and set the tx/rx funcs
 */
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));

#ifdef GNU_LINUX
    retval = open_packet_socket (circuit);
#else
    retval = open_bpf_dev (circuit);
#endif

    if (retval != ISIS_OK)
    {
        zlog_warn ("%s: could not initialize the socket", __func__);
        goto end;
    }

    if (circuit->circ_type == CIRCUIT_T_BROADCAST)
    {
        circuit->tx = isis_send_pdu_bcast;
        circuit->rx = isis_recv_pdu_bcast;
    }
    else if (circuit->circ_type == CIRCUIT_T_P2P)
    {
        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;
    }

end:
    if (isisd_privs.change (ZPRIVS_LOWER))
        zlog_err ("%s: could not lower privs, %s", __func__, safe_strerror (errno));

    return retval;
}
Ejemplo n.º 2
0
/*
 * Create the socket and set the tx/rx funcs
 */
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));

  retval = open_packet_socket (circuit);

  if (retval != ISIS_OK)
    {
      zlog_warn ("%s: could not initialize the socket", __func__);
      goto end;
    }

  /* 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;
    }

end:
  if (isisd_privs.change (ZPRIVS_LOWER))
    zlog_err ("%s: could not lower privs, %s", __func__, safe_strerror (errno));

  return retval;
}