// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "shill/rtnl_listener.h"
#include "shill/rtnl_handler.h"

using base::Callback;

namespace shill {

RTNLListener::RTNLListener(int listen_flags,
                           const Callback<void(const RTNLMessage &)> &callback)
    : listen_flags_(listen_flags), callback_(callback) {
  RTNLHandler::GetInstance()->AddListener(this);
}

RTNLListener::~RTNLListener() {
  RTNLHandler::GetInstance()->RemoveListener(this);
}

void RTNLListener::NotifyEvent(int type, const RTNLMessage &msg) {
  if ((type & listen_flags_) != 0)
    callback_.Run(msg);
}

}  // namespace shill
