1dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat/* 2dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * Copyright (C) 2008 The Android Open Source Project 3dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * 4dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * Licensed under the Apache License, Version 2.0 (the "License"); 5dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * you may not use this file except in compliance with the License. 6dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * You may obtain a copy of the License at 7dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * 8dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * http://www.apache.org/licenses/LICENSE-2.0 9dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * 10dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * Unless required by applicable law or agreed to in writing, software 11dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * distributed under the License is distributed on an "AS IS" BASIS, 12dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * See the License for the specific language governing permissions and 14dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat * limitations under the License. 15dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat */ 163c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat 17dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat#ifndef _NETWORKMANAGER_H 18dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat#define _NETWORKMANAGER_H 19dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 20c4a895b7094461c98101924cf096680bfb7856f1San Mehat#include <utils/List.h> 211441e769b2767e212a3d905bee2fd3535b484ff2San Mehat#include <sysutils/SocketListener.h> 22dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 231441e769b2767e212a3d905bee2fd3535b484ff2San Mehat#include "Controller.h" 243c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat#include "PropertyManager.h" 253aff2d1de59972684bf2ab798351be5544158239San Mehat#include "IControllerHandler.h" 26d6c6796670a5e566977b13d542020fb8cc88e6cfSan Mehat#include "IDhcpEventHandlers.h" 27dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 28192331d9060763b92f7989124bedbd136689d735San Mehatclass InterfaceConfig; 29d6c6796670a5e566977b13d542020fb8cc88e6cfSan Mehatclass DhcpClient; 30192331d9060763b92f7989124bedbd136689d735San Mehat 31d6c6796670a5e566977b13d542020fb8cc88e6cfSan Mehatclass NetworkManager : public IControllerHandler, public IDhcpEventHandlers { 321441e769b2767e212a3d905bee2fd3535b484ff2San Mehat static NetworkManager *sInstance; 331441e769b2767e212a3d905bee2fd3535b484ff2San Mehat 34c4a895b7094461c98101924cf096680bfb7856f1San Mehat class ControllerBinding { 35c4a895b7094461c98101924cf096680bfb7856f1San Mehat Controller *mController; 36c4a895b7094461c98101924cf096680bfb7856f1San Mehat InterfaceConfig *mCurrentCfg; 37c4a895b7094461c98101924cf096680bfb7856f1San Mehat InterfaceConfig *mBoundCfg; 38c4a895b7094461c98101924cf096680bfb7856f1San Mehat 39c4a895b7094461c98101924cf096680bfb7856f1San Mehat public: 40c4a895b7094461c98101924cf096680bfb7856f1San Mehat ControllerBinding(Controller *c); 41c4a895b7094461c98101924cf096680bfb7856f1San Mehat virtual ~ControllerBinding() {} 42c4a895b7094461c98101924cf096680bfb7856f1San Mehat 43c4a895b7094461c98101924cf096680bfb7856f1San Mehat InterfaceConfig *getCurrentCfg() { return mCurrentCfg; } 44c4a895b7094461c98101924cf096680bfb7856f1San Mehat InterfaceConfig *getBoundCfg() { return mCurrentCfg; } 45c4a895b7094461c98101924cf096680bfb7856f1San Mehat Controller *getController() { return mController; } 46c4a895b7094461c98101924cf096680bfb7856f1San Mehat 47c4a895b7094461c98101924cf096680bfb7856f1San Mehat void setCurrentCfg(InterfaceConfig *cfg); 48c4a895b7094461c98101924cf096680bfb7856f1San Mehat void setBoundCfg(InterfaceConfig *cfg); 49c4a895b7094461c98101924cf096680bfb7856f1San Mehat }; 50c4a895b7094461c98101924cf096680bfb7856f1San Mehat 51c4a895b7094461c98101924cf096680bfb7856f1San Mehat typedef android::List<ControllerBinding *> ControllerBindingCollection; 52c4a895b7094461c98101924cf096680bfb7856f1San Mehat 531441e769b2767e212a3d905bee2fd3535b484ff2San Mehatprivate: 54c4a895b7094461c98101924cf096680bfb7856f1San Mehat ControllerBindingCollection *mControllerBindings; 55c4a895b7094461c98101924cf096680bfb7856f1San Mehat SocketListener *mBroadcaster; 56c4a895b7094461c98101924cf096680bfb7856f1San Mehat PropertyManager *mPropMngr; 57c4a895b7094461c98101924cf096680bfb7856f1San Mehat DhcpClient *mDhcp; 58c4a895b7094461c98101924cf096680bfb7856f1San Mehat int mLastDhcpState; 59dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 60dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehatpublic: 613c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat virtual ~NetworkManager(); 62dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 63dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat int run(); 64dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 651441e769b2767e212a3d905bee2fd3535b484ff2San Mehat int attachController(Controller *controller); 661441e769b2767e212a3d905bee2fd3535b484ff2San Mehat 671441e769b2767e212a3d905bee2fd3535b484ff2San Mehat Controller *findController(const char *name); 681441e769b2767e212a3d905bee2fd3535b484ff2San Mehat 691441e769b2767e212a3d905bee2fd3535b484ff2San Mehat void setBroadcaster(SocketListener *sl) { mBroadcaster = sl; } 701441e769b2767e212a3d905bee2fd3535b484ff2San Mehat SocketListener *getBroadcaster() { return mBroadcaster; } 713c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat PropertyManager *getPropMngr() { return mPropMngr; } 721441e769b2767e212a3d905bee2fd3535b484ff2San Mehat 731441e769b2767e212a3d905bee2fd3535b484ff2San Mehat static NetworkManager *Instance(); 741441e769b2767e212a3d905bee2fd3535b484ff2San Mehat 75dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehatprivate: 76dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat int startControllers(); 77dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat int stopControllers(); 784876567cb9c6a69ce21fd2b1c5bcce5a6f274276San Mehat 793c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat NetworkManager(PropertyManager *propMngr); 80c4a895b7094461c98101924cf096680bfb7856f1San Mehat ControllerBinding *lookupBinding(Controller *c); 81c4a895b7094461c98101924cf096680bfb7856f1San Mehat 82c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onInterfaceConnected(Controller *c); 83c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onInterfaceDisconnected(Controller *c); 84c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onControllerSuspending(Controller *c); 85c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onControllerResumed(Controller *c); 86dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat 87c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onDhcpStateChanged(Controller *c, int state); 88c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onDhcpEvent(Controller *c, int event); 89c4a895b7094461c98101924cf096680bfb7856f1San Mehat void onDhcpLeaseUpdated(Controller *c, 90c4a895b7094461c98101924cf096680bfb7856f1San Mehat struct in_addr *addr, struct in_addr *net, 91c4a895b7094461c98101924cf096680bfb7856f1San Mehat struct in_addr *brd, 92c4a895b7094461c98101924cf096680bfb7856f1San Mehat struct in_addr *gw, struct in_addr *dns1, 93c4a895b7094461c98101924cf096680bfb7856f1San Mehat struct in_addr *dns2); 94dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat}; 95dc266073e7c3127caedf26671a1c125dc8aadd8dSan Mehat#endif 96