Source: ../../libxipc/sockutil.hh


 
LOGO
 Annotated List  Files  Globals  Hierarchy  Index  Top
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-

// Copyright (c) 2001-2005 International Computer Science Institute
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software")
// to deal in the Software without restriction, subject to the conditions
// listed in the XORP LICENSE file. These conditions include: you must
// preserve this copyright notice, and you cannot mention the copyright
// holders in advertising related to the Software without their permission.
// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
// notice is a summary of the XORP LICENSE file; the license in that file is
// legally binding.

// $XORP: xorp/libxipc/sockutil.hh,v 1.11 2005/08/18 15:32:39 bms Exp $

/* Some helper functions for sockets */

#ifndef __LIBXIPC_SOCKUTIL_HH__
#define __LIBXIPC_SOCKUTIL_HH__

#include "libxorp/xorp.h"

#include <string>
#include <vector>

#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif

#include "libxorp/ipv4.hh"

/**
 * Create a socket and connect to a given remote endpoint.
 *
 * @param addr_slash_port the address and port of the remote endpoint.
 * @return socket (invalid if unsuccessful).
 */
XorpFd create_connected_tcp4_socket(const string& addr_slash_port);

/**
 * Parse getsockname() result for a socket.
 *
 * @param addr reference to a string to be filled out with local address
 * @param port reference to a port to be filled out with local port
 * @return true if addr and port were filled in.
 */
bool get_local_socket_details(XorpFd fd, string& addr, uint16_t& port);

/**
 * Parse getpeername() result for a connected socket.
 *
 * @param fd socket file descriptor
 * @param addr reference to a string to be filled out with peer address
 * @param port reference to a port to be filled out with peer remote port
 * @return true if addr and port were filled in.
 */
bool get_remote_socket_details(XorpFd fd, string& addr, uint16_t& port);

/**
 * Return a string in addr:port format.
 *
 * @param addr address portion of string
 * @param port port number to be formatted as part of string
 * @return address slash port string
 */
string address_slash_port(const string& addr, uint16_t port);

/**
 * @return true if address_slash_port was split successfully.
 */
bool split_address_slash_port(const string& address_slash_port,
			      string& address, uint16_t& port);

/**
 * Lookup an IPv4 address by name.
 *
 * @param addr address to be resolved.
 * @param ia network address.
 * @return true if address resolves.
 */
bool address_lookup(const string& addr, in_addr& ia);

/**
 * Determine if an IPv4 address is configured and active within this
 * host's networking stack.
 *
 * @param ia IPv4 address to be checked.
 * @return true if address is an IP address belonging to a configured and
 * administratively up interface on the system, false otherwise.
 */
bool is_ip_configured(const in_addr& ia);

/**
 * Set preferred IPv4 address for IPC communication.
 *
 * @param addr preferred IPv4 address
 * @return true on success, false if addr is not an active IPv4 address
 * configured on the system.
 */
bool set_preferred_ipv4_addr(in_addr addr);

/**
 * Get preferred interface for XRL communication.  If not set by
 * set_preferred_ipv4_addr, it is the first valid loopback interface.
 * If there is no valid loopback interface, then it is the first valid
 * interface.
 *
 * @return IPv4 address in use for XRL communucation.
 */
in_addr get_preferred_ipv4_addr();

/*
 * Get a list of of active and configured IPv4 addresses on the system.
 *
 * @param addrs empty vector of IPv4 addresses
 */
void get_active_ipv4_addrs(vector<IPv4>& addrs);

#endif // __LIBXIPC_SOCKUTIL_HH__

Generated by: pavlin on possum.icir.org on Thu Mar 9 04:42:28 2006, using kdoc $.