1d18304287dbabc7835be771400b85d4ae8b63de6San Mehat/*
2d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * Copyright (C) 2008 The Android Open Source Project
3d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *
4d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
5d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * you may not use this file except in compliance with the License.
6d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * You may obtain a copy of the License at
7d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *
8d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
9d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *
10d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * Unless required by applicable law or agreed to in writing, software
11d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
12d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * See the License for the specific language governing permissions and
14d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * limitations under the License.
15d18304287dbabc7835be771400b85d4ae8b63de6San Mehat */
16d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
17d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#ifndef _NETLINKMANAGER_H
18d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#define _NETLINKMANAGER_H
19d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
20d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <sysutils/SocketListener.h>
21d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <sysutils/NetlinkListener.h>
22d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
23e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall
24d18304287dbabc7835be771400b85d4ae8b63de6San Mehatclass NetlinkHandler;
25d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
26d18304287dbabc7835be771400b85d4ae8b63de6San Mehatclass NetlinkManager {
27d18304287dbabc7835be771400b85d4ae8b63de6San Mehatprivate:
28d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    static NetlinkManager *sInstance;
29d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
30d18304287dbabc7835be771400b85d4ae8b63de6San Mehatprivate:
31d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    SocketListener       *mBroadcaster;
32564df4efc87f3d04c3570836d38134fd949c4cafMike J. Chen    NetlinkHandler       *mUeventHandler;
33564df4efc87f3d04c3570836d38134fd949c4cafMike J. Chen    NetlinkHandler       *mRouteHandler;
34e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall    NetlinkHandler       *mQuotaHandler;
356337b88ce4438d224819e9b381ddaf2873bbfddaAshish Sharma    NetlinkHandler       *mIfaceIdleTimerHandler;
36564df4efc87f3d04c3570836d38134fd949c4cafMike J. Chen    int                  mUeventSock;
37564df4efc87f3d04c3570836d38134fd949c4cafMike J. Chen    int                  mRouteSock;
38e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall    int                  mQuotaSock;
39d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
40d18304287dbabc7835be771400b85d4ae8b63de6San Mehatpublic:
41d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    virtual ~NetlinkManager();
42d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
43d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    int start();
44d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    int stop();
45d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
46d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    void setBroadcaster(SocketListener *sl) { mBroadcaster = sl; }
47d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    SocketListener *getBroadcaster() { return mBroadcaster; }
48d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
49d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    static NetlinkManager *Instance();
50d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
51e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall    /* This is the nflog group arg that the xt_quota2 neftiler will use. */
52e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall    static const int NFLOG_QUOTA_GROUP;
53e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall
546337b88ce4438d224819e9b381ddaf2873bbfddaAshish Sharma    /* This is the group that the xt_IDLETIMER netfilter will use. */
556337b88ce4438d224819e9b381ddaf2873bbfddaAshish Sharma    static const int IDLETIMER_GROUP;
566337b88ce4438d224819e9b381ddaf2873bbfddaAshish Sharma
57d18304287dbabc7835be771400b85d4ae8b63de6San Mehatprivate:
58d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    NetlinkManager();
59e0ebc46c0aa38ce4f35bd3b60c0fcb9204d4c35eJP Abgrall    NetlinkHandler* setupSocket(int *sock, int netlinkFamily, int groups,
60564df4efc87f3d04c3570836d38134fd949c4cafMike J. Chen        int format);
61d18304287dbabc7835be771400b85d4ae8b63de6San Mehat};
62d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#endif
63