NetlinkHandler.cpp revision a976656ff90291b9437a4d37b48e82abcd48195e
1a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren/*
2a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren * Copyright (C) 2008 The Android Open Source Project
3a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren *
4e071abda7825ef1049ed94691fac5ca853b47f09Julia Reynolds * Licensed under the Apache License, Version 2.0 (the "License");
5a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren * you may not use this file except in compliance with the License.
6a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren * You may obtain a copy of the License at
7a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren *
8780861f2452b519c128289dac836e5a756100e1dJeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9780861f2452b519c128289dac836e5a756100e1dJeff Sharkey *
10780861f2452b519c128289dac836e5a756100e1dJeff Sharkey * Unless required by applicable law or agreed to in writing, software
11780861f2452b519c128289dac836e5a756100e1dJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a05db3816b4e29790aed9de9ef1cf4b2d0b616c9Chris Wren * See the License for the specific language governing permissions and
14e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette * limitations under the License.
15e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette */
16e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette
1727ee33482a2fdecbbbedbd33a137ceae3e93fa2aphweiss#include <stdio.h>
1827ee33482a2fdecbbbedbd33a137ceae3e93fa2aphweiss#include <stdlib.h>
19e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette#include <errno.h>
20e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette#include <string.h>
21e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette
22e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette#define LOG_TAG "Vold"
23e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette
24e7ee54ee7f4985bc743053d38d21f33c70220f05Craig Lafayette#include <cutils/log.h>
25789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey
26789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey#include <sysutils/NetlinkEvent.h>
27789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey#include "NetlinkHandler.h"
28789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey#include "VolumeManager.h"
29789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey
30789a8fc792725e4988ff43d554b3c8c037c41921Jeff SharkeyNetlinkHandler::NetlinkHandler(int listenerSocket) :
31789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey                NetlinkListener(listenerSocket) {
32789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey}
33789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey
34789a8fc792725e4988ff43d554b3c8c037c41921Jeff SharkeyNetlinkHandler::~NetlinkHandler() {
35789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey}
36789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey
37789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkeyint NetlinkHandler::start() {
38789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey    return this->startListener();
398a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkey}
408a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkey
418a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkeyint NetlinkHandler::stop() {
42cf3f0a11a83e7a798e0586a78efdafc82a7f3d08Jeff Sharkey    return this->stopListener();
43cf3f0a11a83e7a798e0586a78efdafc82a7f3d08Jeff Sharkey}
448a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkey
458a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkeyvoid NetlinkHandler::onEvent(NetlinkEvent *evt) {
46ce1d0e94593eed9f838ff2a01e45aca5576ea7feGarfield Tan    VolumeManager *vm = VolumeManager::Instance();
47ce1d0e94593eed9f838ff2a01e45aca5576ea7feGarfield Tan    const char *subsys = evt->getSubsystem();
48ce1d0e94593eed9f838ff2a01e45aca5576ea7feGarfield Tan
49ce1d0e94593eed9f838ff2a01e45aca5576ea7feGarfield Tan    if (!subsys) {
508a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkey        SLOGW("No subsystem found in netlink event");
518a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkey        return;
52c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav    }
53c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav
54789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey    if (!strcmp(subsys, "block")) {
55789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey        vm->handleBlockEvent(evt);
56789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey    }
57789a8fc792725e4988ff43d554b3c8c037c41921Jeff Sharkey}
588a372a0a280127743ce9a7ce4b6198c7a02d2a4fJeff Sharkey