/* * Copyright (c) 2015 Red Hat, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "if-notifier.h" #include "rtbsd.h" #include "util.h" struct if_notifier { struct rtbsd_notifier notifier; if_notify_func *cb; void *aux; }; static void if_notifier_cb(const struct rtbsd_change *change OVS_UNUSED, void *aux) { struct if_notifier *notifier; notifier = aux; notifier->cb(notifier->aux); } struct if_notifier * if_notifier_create(if_notify_func *cb, void *aux) { struct if_notifier *notifier; int ret; notifier = xzalloc(sizeof *notifier); notifier->cb = cb; notifier->aux = aux; ret = rtbsd_notifier_register(¬ifier->notifier, if_notifier_cb, notifier); if (ret) { free(notifier); return NULL; } return notifier; } void if_notifier_destroy(struct if_notifier *notifier) { if (notifier) { rtbsd_notifier_unregister(¬ifier->notifier); free(notifier); } } void if_notifier_run(void) { rtbsd_notifier_run(); } void if_notifier_wait(void) { rtbsd_notifier_wait(); }