X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=secchan%2Fnetflow.h;h=cc7b96057071705c65f170edcd756e3f32b47256;hb=347401f756e6678fced43ecee27f5107c803fda2;hp=f37d6eff0a96b3f64bed2e735ec48ad7d5fd125f;hpb=064af42167bf4fc9aaea2702d80ce08074b889c0;p=openvswitch diff --git a/secchan/netflow.h b/secchan/netflow.h index f37d6eff..cc7b9605 100644 --- a/secchan/netflow.h +++ b/secchan/netflow.h @@ -1,33 +1,65 @@ /* * Copyright (c) 2008, 2009 Nicira Networks. * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. + * 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: * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * 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. */ #ifndef NETFLOW_H #define NETFLOW_H 1 #include "flow.h" +#include "svec.h" struct ofexpired; -struct svec; + +struct netflow_options { + struct svec collectors; + uint8_t engine_type; + uint8_t engine_id; + int active_timeout; + bool add_id_to_iface; +}; + +enum netflow_output_ports { + NF_OUT_FLOOD = UINT16_MAX, + NF_OUT_MULTI = UINT16_MAX - 1, + NF_OUT_DROP = UINT16_MAX - 2 +}; + +struct netflow_flow { + long long int last_expired; /* Time this flow last timed out. */ + long long int created; /* Time flow was created since time out. */ + + uint64_t packet_count_off; /* Packet count at last time out. */ + uint64_t byte_count_off; /* Byte count at last time out. */ + + uint16_t output_iface; /* Output interface index. */ + uint8_t ip_tos; /* Last-seen IP type-of-service. */ + uint8_t tcp_flags; /* Bitwise-OR of all TCP flags seen. */ +}; struct netflow *netflow_create(void); void netflow_destroy(struct netflow *); -int netflow_set_collectors(struct netflow *, const struct svec *collectors); -void netflow_set_engine(struct netflow *nf, uint8_t engine_type, - uint8_t engine_id, bool add_id_to_iface); -void netflow_expire(struct netflow *, const struct ofexpired *); +int netflow_set_options(struct netflow *, const struct netflow_options *); +void netflow_expire(struct netflow *, struct netflow_flow *, + struct ofexpired *); void netflow_run(struct netflow *); +void netflow_flow_clear(struct netflow_flow *); +void netflow_flow_update_time(struct netflow *, struct netflow_flow *, + long long int used); +void netflow_flow_update_flags(struct netflow_flow *, uint8_t ip_tos, + uint8_t tcp_flags); +bool netflow_active_timeout_expired(struct netflow *, struct netflow_flow *); + #endif /* netflow.h */