trema/trema-edge

View on GitHub
src/lib/packetin_filter_interface.h

Summary

Maintainability
Test Coverage
/*
 * Author: Yasunobu Chiba
 *
 * Copyright (C) 2008-2013 NEC Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License, version 2, as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */


#ifndef PACKETIN_FILTER_INTERFACE_H
#define PACKETIN_FILTER_INTERFACE_H


#include <inttypes.h>
#include <openflow.h>
#include "bool.h"
#include "messenger.h"
#include "oxm_match.h"


#define PACKETIN_FILTER_MANAGEMENT_SERVICE "packetin_filter_management"


enum {
  MESSENGER_ADD_PACKETIN_FILTER_REQUEST = 0x0010,
  MESSENGER_ADD_PACKETIN_FILTER_REPLY,
  MESSENGER_DELETE_PACKETIN_FILTER_REQUEST,
  MESSENGER_DELETE_PACKETIN_FILTER_REPLY,
  MESSENGER_DUMP_PACKETIN_FILTER_REQUEST,
  MESSENGER_DUMP_PACKETIN_FILTER_REPLY,
};

enum {
  PACKETIN_FILTER_OPERATION_SUCCEEDED,
  PACKETIN_FILTER_OPERATION_FAILED,
};

enum {
  PACKETIN_FILTER_FLAG_MATCH_LOOSE = 0x00,
  PACKETIN_FILTER_FLAG_MATCH_STRICT = 0x01,
};


typedef struct {
  uint16_t length;
  uint16_t priority;
  uint8_t pad[ 4 ];
  char service_name[ MESSENGER_SERVICE_NAME_LENGTH ];
  struct ofp_match match;
} __attribute__( ( packed ) ) packetin_filter_entry;

typedef struct {
  uint16_t length;
  uint8_t pad[ 6 ];
  packetin_filter_entry entry;
} __attribute__( ( packed ) ) add_packetin_filter_request;

typedef struct {
  uint8_t status;
} __attribute__( ( packed ) ) add_packetin_filter_reply;

typedef struct {
  uint16_t length;
  uint8_t flags;
  uint8_t pad[ 5 ];
  packetin_filter_entry criteria;
} __attribute__( ( packed ) ) delete_packetin_filter_request;

typedef struct {
  uint8_t status;
  uint32_t n_deleted;
} __attribute__( ( packed ) ) delete_packetin_filter_reply;

typedef struct {
  uint16_t length;
  uint8_t flags;
  uint8_t pad[ 5 ];
  packetin_filter_entry criteria;
} __attribute__( ( packed ) ) dump_packetin_filter_request;

typedef struct {
  uint16_t length;
  uint8_t pad;
  uint8_t status;
  uint32_t n_entries;
  packetin_filter_entry entries[ 0 ];
} __attribute__( ( packed ) ) dump_packetin_filter_reply;


typedef void ( *add_packetin_filter_handler )(
  int status,
  void *user_data
);

typedef void ( *delete_packetin_filter_handler )(
  int status,
  int n_deleted,
  void *user_data
);

typedef void ( *dump_packetin_filter_handler )(
  int status,
  int n_entries,
  packetin_filter_entry *entries,
  void *user_data
);


bool add_packetin_filter( oxm_matches *match, uint16_t priority, char *service_name,
                          add_packetin_filter_handler callback, void *user_data );
bool delete_packetin_filter( oxm_matches *match, uint16_t priority, char *service_name, bool strict,
                             delete_packetin_filter_handler callback, void *user_data );
bool dump_packetin_filter( oxm_matches *match, uint16_t priority, char *service_name, bool strict,
                           dump_packetin_filter_handler callback, void *user_data );
bool init_packetin_filter_interface( void );
bool finalize_packetin_filter_interface( void );


#endif // PACKETIN_FILTER_INTERFACE_H


/*
 * Local variables:
 * c-basic-offset: 2
 * indent-tabs-mode: nil
 * End:
 */