socket_info.h revision 1a212a6b98b22ad1d69652bb26a9e94138635476
1086d980eb6a82fa644037785bc42a16586c2e774Ben Chan// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 2086d980eb6a82fa644037785bc42a16586c2e774Ben Chan// Use of this source code is governed by a BSD-style license that can be 3086d980eb6a82fa644037785bc42a16586c2e774Ben Chan// found in the LICENSE file. 4086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 5086d980eb6a82fa644037785bc42a16586c2e774Ben Chan#ifndef SHILL_SOCKET_INFO_H_ 6086d980eb6a82fa644037785bc42a16586c2e774Ben Chan#define SHILL_SOCKET_INFO_H_ 7086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 8cc67c52a2c00f90e877971d552208dd99825d84eBen Chan#include <base/macros.h> 9086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 108d6b59704591ba9fad57751858835dc332dbdd37Peter Qiu#include "shill/net/ip_address.h" 11086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 12086d980eb6a82fa644037785bc42a16586c2e774Ben Channamespace shill { 13086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 14086d980eb6a82fa644037785bc42a16586c2e774Ben Chanclass SocketInfo { 15086d980eb6a82fa644037785bc42a16586c2e774Ben Chan public: 16086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // These connection states (except kConnectionStateUnknown and 17086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // kConnectionStateMax) are equivalent to and should be kept in sync with 18086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // those defined in kernel/inlude/net/tcp_states.h 19086d980eb6a82fa644037785bc42a16586c2e774Ben Chan enum ConnectionState { 20086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateUnknown = -1, 21086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateEstablished = 1, 22086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateSynSent, 23086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateSynRecv, 24086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateFinWait1, 25086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateFinWait2, 26086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateTimeWait, 27086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateClose, 28086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateCloseWait, 29086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateLastAck, 30086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateListen, 31086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateClosing, 32086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateMax, 33086d980eb6a82fa644037785bc42a16586c2e774Ben Chan }; 34086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 35086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // These timer states (except kTimerStateUnknown and kTimerStateMax) are 36086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // equivalent to and should be kept in sync with those specified in 37086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // kernel/Documentation/networking/proc_net_tcp.txt 38086d980eb6a82fa644037785bc42a16586c2e774Ben Chan enum TimerState { 39086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateUnknown = -1, 40086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateNoTimerPending = 0, 41086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateRetransmitTimerPending, 42086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateAnotherTimerPending, 43086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateInTimeWaitState, 44086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateZeroWindowProbeTimerPending, 45086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateMax, 46086d980eb6a82fa644037785bc42a16586c2e774Ben Chan }; 47086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 48086d980eb6a82fa644037785bc42a16586c2e774Ben Chan SocketInfo(); 49086d980eb6a82fa644037785bc42a16586c2e774Ben Chan SocketInfo(ConnectionState connection_state, 501a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& local_ip_address, 517fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t local_port, 521a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& remote_ip_address, 537fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t remote_port, 547fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t transmit_queue_value, 557fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t receive_queue_value, 56086d980eb6a82fa644037785bc42a16586c2e774Ben Chan TimerState timer_state); 571a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart SocketInfo(const SocketInfo& socket_info); 58086d980eb6a82fa644037785bc42a16586c2e774Ben Chan ~SocketInfo(); 59086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 601a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart SocketInfo& operator=(const SocketInfo& socket_info); 61086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 62086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // Returns true if this socket info and |socket_info| refer to the same 63086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // socket, i.e. both have the same local address, local port, remote address, 64086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // and remote port. 651a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart bool IsSameSocketAs(const SocketInfo& socket_info) const; 66086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 67086d980eb6a82fa644037785bc42a16586c2e774Ben Chan ConnectionState connection_state() const { return connection_state_; } 68086d980eb6a82fa644037785bc42a16586c2e774Ben Chan void set_connection_state(ConnectionState connection_state) { 69086d980eb6a82fa644037785bc42a16586c2e774Ben Chan connection_state_ = connection_state; 70086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 71086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 721a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& local_ip_address() const { return local_ip_address_; } 731a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart void set_local_ip_address(const IPAddress& local_ip_address) { 74086d980eb6a82fa644037785bc42a16586c2e774Ben Chan local_ip_address_ = local_ip_address; 75086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 76086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 777fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t local_port() const { return local_port_; } 787fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_local_port(uint16_t local_port) { local_port_ = local_port; } 79086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 801a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& remote_ip_address() const { return remote_ip_address_; } 811a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart void set_remote_ip_address(const IPAddress& remote_ip_address) { 82086d980eb6a82fa644037785bc42a16586c2e774Ben Chan remote_ip_address_ = remote_ip_address; 83086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 84086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 857fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t remote_port() const { return remote_port_; } 867fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_remote_port(uint16_t remote_port) { remote_port_ = remote_port; } 87086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 887fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t transmit_queue_value() const { return transmit_queue_value_; } 897fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_transmit_queue_value(uint64_t transmit_queue_value) { 90086d980eb6a82fa644037785bc42a16586c2e774Ben Chan transmit_queue_value_ = transmit_queue_value; 91086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 92086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 937fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t receive_queue_value() const { return receive_queue_value_; } 947fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_receive_queue_value(uint64_t receive_queue_value) { 95086d980eb6a82fa644037785bc42a16586c2e774Ben Chan receive_queue_value_ = receive_queue_value; 96086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 97086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 98086d980eb6a82fa644037785bc42a16586c2e774Ben Chan TimerState timer_state() const { return timer_state_; } 99086d980eb6a82fa644037785bc42a16586c2e774Ben Chan void set_timer_state(TimerState timer_state) { timer_state_ = timer_state; } 100086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 101086d980eb6a82fa644037785bc42a16586c2e774Ben Chan private: 102086d980eb6a82fa644037785bc42a16586c2e774Ben Chan ConnectionState connection_state_; 103086d980eb6a82fa644037785bc42a16586c2e774Ben Chan IPAddress local_ip_address_; 1047fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t local_port_; 105086d980eb6a82fa644037785bc42a16586c2e774Ben Chan IPAddress remote_ip_address_; 1067fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t remote_port_; 1077fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t transmit_queue_value_; 1087fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t receive_queue_value_; 109086d980eb6a82fa644037785bc42a16586c2e774Ben Chan TimerState timer_state_; 110086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 111086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // No DISALLOW_COPY_AND_ASSIGN(SocketInfo) as SocketInfo needs to be kept in 112086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // STL containers. 113086d980eb6a82fa644037785bc42a16586c2e774Ben Chan}; 114086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 115086d980eb6a82fa644037785bc42a16586c2e774Ben Chan} // namespace shill 116086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 117086d980eb6a82fa644037785bc42a16586c2e774Ben Chan#endif // SHILL_SOCKET_INFO_H_ 118