/*
 *
 * q_ingress.c             INGRESS.
 *
 *              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.
 *
 * Authors:    J Hadi Salim
 *
 * This is here just in case it is needed
 * useless right now; might be useful in the future
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>

#include "utils.h"
#include "tc_util.h"

static void explain(void)
{
	fprintf(stderr, "Usage: ... ingress \n");
}

#define usage() return(-1)

static int ingress_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n)
{

	if (argc > 0) {
		while (argc > 0) {

			if (strcmp(*argv, "handle") == 0) {
				NEXT_ARG();
				argc--; argv++;
			} else {
				fprintf(stderr, "What is \"%s\"?\n", *argv);
				explain();
				return -1;
			}
		}
	}

	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
	return 0;
}

static int ingress_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
{

		fprintf(f, "---------------- ");
	return 0;
}

static int ingress_print_xstats(struct qdisc_util *qu, FILE *f, struct rtattr *xstats)
{
	return 0;
}

struct qdisc_util ingress_util = {
        NULL,
        "ingress",
        ingress_parse_opt,
        ingress_print_opt,
        ingress_print_xstats,
};
