1168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat/* 2168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Copyright (C) 2008 The Android Open Source Project 3168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 4168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Licensed under the Apache License, Version 2.0 (the "License"); 5168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * you may not use this file except in compliance with the License. 6168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * You may obtain a copy of the License at 7168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 8168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * http://www.apache.org/licenses/LICENSE-2.0 9168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 10168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Unless required by applicable law or agreed to in writing, software 11168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * distributed under the License is distributed on an "AS IS" BASIS, 12168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * See the License for the specific language governing permissions and 14168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * limitations under the License. 15168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat */ 16168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#ifndef _NETLINKEVENT_H 17168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#define _NETLINKEVENT_H 18168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 1917260b14682d4fe59dad3de2de8c9370e6ba9a71Mike J. Chen#include <sysutils/NetlinkListener.h> 2017260b14682d4fe59dad3de2de8c9370e6ba9a71Mike J. Chen 21168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#define NL_PARAMS_MAX 32 22168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 23168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatclass NetlinkEvent { 24e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkeypublic: 25e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey enum class Action { 26e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kUnknown = 0, 27e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kAdd = 1, 28e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kRemove = 2, 29e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kChange = 3, 30e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kLinkUp = 4, 31e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kLinkDown = 5, 32e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kAddressUpdated = 6, 33e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kAddressRemoved = 7, 34e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kRdnss = 8, 35e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kRouteUpdated = 9, 36e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey kRouteRemoved = 10, 37e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey }; 38e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey 39e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkeyprivate: 40168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat int mSeq; 41168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat char *mPath; 42e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey Action mAction; 43168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat char *mSubsystem; 44168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat char *mParams[NL_PARAMS_MAX]; 45168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 46168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatpublic: 47168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat NetlinkEvent(); 48168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat virtual ~NetlinkEvent(); 49168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 5017260b14682d4fe59dad3de2de8c9370e6ba9a71Mike J. Chen bool decode(char *buffer, int size, int format = NetlinkListener::NETLINK_FORMAT_ASCII); 51168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const char *findParam(const char *paramName); 52168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 53168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const char *getSubsystem() { return mSubsystem; } 54e4f394087d2073dbe8309e5a2d87127cfda66ff9Jeff Sharkey Action getAction() { return mAction; } 55d674413ff460afe1da049e54bb7a489132799749San Mehat 56d674413ff460afe1da049e54bb7a489132799749San Mehat void dump(); 57ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen 58ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen protected: 59ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen bool parseBinaryNetlinkMessage(char *buffer, int size); 60ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen bool parseAsciiNetlinkMessage(char *buffer, int size); 619b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseIfInfoMessage(const struct nlmsghdr *nh); 629b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseIfAddrMessage(const struct nlmsghdr *nh); 639b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseUlogPacketMessage(const struct nlmsghdr *nh); 649a20e67fa62c1e0e0080910deec4be82ebecc922Jeff Sharkey bool parseNfPacketMessage(struct nlmsghdr *nh); 65d7ff7ea65220718398cae1e1aa0005072229b4e7Lorenzo Colitti bool parseRtMessage(const struct nlmsghdr *nh); 669b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseNdUserOptMessage(const struct nlmsghdr *nh); 67168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat}; 68168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 69168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#endif 70