/* gprs_codel.h
 *
 * This is an implementation of the CoDel algorithm based on the reference
 * pseudocode (see http://queue.acm.org/appendices/codel.html).
 * Instead of abstracting the queue itself, the following implementation
 * provides a time stamp based automaton. The main work is done by a single
 * decision function which updates the state and tells whether to pass or to
 * drop a packet after it has been taken from the queue.
 *
 * Copyright (C) 2015 by Sysmocom s.f.m.c. GmbH
 * Author: Jacob Erlbeck <jerlbeck@sysmocom.de>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#pragma once

#include <sys/time.h>

/* Spec default values */
#define GPRS_CODEL_DEFAULT_INTERVAL_MS 100
#define GPRS_CODEL_DEFAULT_MAXPACKET 512

#ifdef __cplusplus
extern "C" {
#endif

struct gprs_codel {
	int dropping;
	unsigned count;
	struct timeval first_above_time;
	struct timeval drop_next;
	struct timeval target;
	struct timeval interval;
	unsigned maxpacket;
};

/*!
 * \brief Decide about packet drop and update CoDel state
 *
 * This function takes timing information and decides whether the packet in
 * question should be dropped in order to keep related queue in a 'good' state.
 * The function is meant to be called when the packet is dequeued.
 *
 * The CoDel state is updated by this function.
 *
 * \param state	 A pointer to the CoDel state of this queue
 * \param recv	 The time when the packet has entered the queue,
 *		 use NULL if dequeueing was not possible because the queue is
 *		 empty
 * \param now	 The current (dequeueing) time
 * \param bytes	 The number of bytes currently stored in the queue (-1 if
 *		 unknown)
 *
 * \return != 0 if the packet should be dropped, 0 otherwise
 */
int gprs_codel_control(struct gprs_codel *state, const struct timeval *recv,
	const struct timeval *now, int bytes);

/*!
 * \brief Initialise CoDel state
 *
 * This function initialises the CoDel state object. It sets the interval time
 * to the default value (GPRS_CODEL_DEFAULT_INTERVAL_MS).
 *
 * \param state		A pointer to the CoDel state of this queue
 */
void gprs_codel_init(struct gprs_codel *state);

/*!
 * \brief Set interval time
 *
 * This function changes the interval time.
 * The target time is derived from the interval time as proposed in the spec
 * (5% of interval time).
 *
 * \param state		A pointer to the CoDel state of this queue
 * \param interval_ms	The initial interval in ms to be used (<= 0 selects the
 *			default value)
 */
void gprs_codel_set_interval(struct gprs_codel *state, int interval_ms);

/*!
 * \brief Set max packet size
 *
 * This function changes the maxpacket value. If no more than this number of
 * bytes are still stored in the queue, no dropping will be done.
 *
 * \param state		A pointer to the CoDel state of this queue
 * \param maxpacket	The value in bytes
 */
void gprs_codel_set_maxpacket(struct gprs_codel *state, int maxpacket);

#ifdef __cplusplus
}
#endif
