1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2013 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 16086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 17086d980eb6a82fa644037785bc42a16586c2e774Ben Chan#ifndef SHILL_SOCKET_INFO_H_ 18086d980eb6a82fa644037785bc42a16586c2e774Ben Chan#define SHILL_SOCKET_INFO_H_ 19086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 20cc67c52a2c00f90e877971d552208dd99825d84eBen Chan#include <base/macros.h> 21086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 228d6b59704591ba9fad57751858835dc332dbdd37Peter Qiu#include "shill/net/ip_address.h" 23086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 24086d980eb6a82fa644037785bc42a16586c2e774Ben Channamespace shill { 25086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 26086d980eb6a82fa644037785bc42a16586c2e774Ben Chanclass SocketInfo { 27086d980eb6a82fa644037785bc42a16586c2e774Ben Chan public: 28086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // These connection states (except kConnectionStateUnknown and 29086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // kConnectionStateMax) are equivalent to and should be kept in sync with 30086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // those defined in kernel/inlude/net/tcp_states.h 31086d980eb6a82fa644037785bc42a16586c2e774Ben Chan enum ConnectionState { 32086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateUnknown = -1, 33086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateEstablished = 1, 34086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateSynSent, 35086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateSynRecv, 36086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateFinWait1, 37086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateFinWait2, 38086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateTimeWait, 39086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateClose, 40086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateCloseWait, 41086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateLastAck, 42086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateListen, 43086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateClosing, 44086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kConnectionStateMax, 45086d980eb6a82fa644037785bc42a16586c2e774Ben Chan }; 46086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 47086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // These timer states (except kTimerStateUnknown and kTimerStateMax) are 48086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // equivalent to and should be kept in sync with those specified in 49086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // kernel/Documentation/networking/proc_net_tcp.txt 50086d980eb6a82fa644037785bc42a16586c2e774Ben Chan enum TimerState { 51086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateUnknown = -1, 52086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateNoTimerPending = 0, 53086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateRetransmitTimerPending, 54086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateAnotherTimerPending, 55086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateInTimeWaitState, 56086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateZeroWindowProbeTimerPending, 57086d980eb6a82fa644037785bc42a16586c2e774Ben Chan kTimerStateMax, 58086d980eb6a82fa644037785bc42a16586c2e774Ben Chan }; 59086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 60086d980eb6a82fa644037785bc42a16586c2e774Ben Chan SocketInfo(); 61086d980eb6a82fa644037785bc42a16586c2e774Ben Chan SocketInfo(ConnectionState connection_state, 621a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& local_ip_address, 637fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t local_port, 641a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& remote_ip_address, 657fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t remote_port, 667fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t transmit_queue_value, 677fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t receive_queue_value, 68086d980eb6a82fa644037785bc42a16586c2e774Ben Chan TimerState timer_state); 691a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart SocketInfo(const SocketInfo& socket_info); 70086d980eb6a82fa644037785bc42a16586c2e774Ben Chan ~SocketInfo(); 71086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 721a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart SocketInfo& operator=(const SocketInfo& socket_info); 73086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 74086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // Returns true if this socket info and |socket_info| refer to the same 75086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // socket, i.e. both have the same local address, local port, remote address, 76086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // and remote port. 771a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart bool IsSameSocketAs(const SocketInfo& socket_info) const; 78086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 79086d980eb6a82fa644037785bc42a16586c2e774Ben Chan ConnectionState connection_state() const { return connection_state_; } 80086d980eb6a82fa644037785bc42a16586c2e774Ben Chan void set_connection_state(ConnectionState connection_state) { 81086d980eb6a82fa644037785bc42a16586c2e774Ben Chan connection_state_ = connection_state; 82086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 83086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 841a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& local_ip_address() const { return local_ip_address_; } 851a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart void set_local_ip_address(const IPAddress& local_ip_address) { 86086d980eb6a82fa644037785bc42a16586c2e774Ben Chan local_ip_address_ = local_ip_address; 87086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 88086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 897fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t local_port() const { return local_port_; } 907fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_local_port(uint16_t local_port) { local_port_ = local_port; } 91086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 921a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const IPAddress& remote_ip_address() const { return remote_ip_address_; } 931a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart void set_remote_ip_address(const IPAddress& remote_ip_address) { 94086d980eb6a82fa644037785bc42a16586c2e774Ben Chan remote_ip_address_ = remote_ip_address; 95086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 96086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 977fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t remote_port() const { return remote_port_; } 987fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_remote_port(uint16_t remote_port) { remote_port_ = remote_port; } 99086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 1007fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t transmit_queue_value() const { return transmit_queue_value_; } 1017fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_transmit_queue_value(uint64_t transmit_queue_value) { 102086d980eb6a82fa644037785bc42a16586c2e774Ben Chan transmit_queue_value_ = transmit_queue_value; 103086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 104086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 1057fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t receive_queue_value() const { return receive_queue_value_; } 1067fab89734d88724a288e96a9996b15548c5294c7Ben Chan void set_receive_queue_value(uint64_t receive_queue_value) { 107086d980eb6a82fa644037785bc42a16586c2e774Ben Chan receive_queue_value_ = receive_queue_value; 108086d980eb6a82fa644037785bc42a16586c2e774Ben Chan } 109086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 110086d980eb6a82fa644037785bc42a16586c2e774Ben Chan TimerState timer_state() const { return timer_state_; } 111086d980eb6a82fa644037785bc42a16586c2e774Ben Chan void set_timer_state(TimerState timer_state) { timer_state_ = timer_state; } 112086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 113086d980eb6a82fa644037785bc42a16586c2e774Ben Chan private: 114086d980eb6a82fa644037785bc42a16586c2e774Ben Chan ConnectionState connection_state_; 115086d980eb6a82fa644037785bc42a16586c2e774Ben Chan IPAddress local_ip_address_; 1167fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t local_port_; 117086d980eb6a82fa644037785bc42a16586c2e774Ben Chan IPAddress remote_ip_address_; 1187fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t remote_port_; 1197fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t transmit_queue_value_; 1207fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint64_t receive_queue_value_; 121086d980eb6a82fa644037785bc42a16586c2e774Ben Chan TimerState timer_state_; 122086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 123086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // No DISALLOW_COPY_AND_ASSIGN(SocketInfo) as SocketInfo needs to be kept in 124086d980eb6a82fa644037785bc42a16586c2e774Ben Chan // STL containers. 125086d980eb6a82fa644037785bc42a16586c2e774Ben Chan}; 126086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 127086d980eb6a82fa644037785bc42a16586c2e774Ben Chan} // namespace shill 128086d980eb6a82fa644037785bc42a16586c2e774Ben Chan 129086d980eb6a82fa644037785bc42a16586c2e774Ben Chan#endif // SHILL_SOCKET_INFO_H_ 130