18808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf/* 28808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * src/lib/qdisc.c CLI QDisc Helpers 38808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * 48808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * This library is free software; you can redistribute it and/or 58808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * modify it under the terms of the GNU Lesser General Public 68808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * License as published by the Free Software Foundation version 2.1 78808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * of the License. 88808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * 98808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * Copyright (c) 2008-2009 Thomas Graf <tgraf@suug.ch> 108808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf */ 118808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 128808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf/** 138808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * @ingroup cli 148808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * @defgroup cli_qdisc Queueing Disciplines 158808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * 168808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf * @{ 178808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf */ 188808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 198808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf#include <netlink/cli/utils.h> 208808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf#include <netlink/cli/qdisc.h> 218808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 228808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Grafstruct rtnl_qdisc *nl_cli_qdisc_alloc(void) 238808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf{ 248808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf struct rtnl_qdisc *qdisc; 258808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 268808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf qdisc = rtnl_qdisc_alloc(); 278808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf if (!qdisc) 288808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf nl_cli_fatal(ENOMEM, "Unable to allocate qdisc object"); 298808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 308808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf return qdisc; 318808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf} 328808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 338808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Grafvoid nl_cli_qdisc_parse_dev(struct rtnl_qdisc *qdisc, struct nl_cache *link_cache, char *arg) 348808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf{ 358808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf int ival; 368808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 378808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf if (!(ival = rtnl_link_name2i(link_cache, arg))) 388808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf nl_cli_fatal(ENOENT, "Link \"%s\" does not exist", arg); 398808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 408808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf rtnl_qdisc_set_ifindex(qdisc, ival); 418808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf} 428808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 438808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Grafvoid nl_cli_qdisc_parse_parent(struct rtnl_qdisc *qdisc, char *arg) 448808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf{ 458808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf uint32_t parent; 468808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf int err; 478808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 488808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf if ((err = rtnl_tc_str2handle(arg, &parent)) < 0) 498808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf nl_cli_fatal(err, "Unable to parse handle \"%s\": %s", 508808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf arg, nl_geterror(err)); 518808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 528808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf rtnl_qdisc_set_parent(qdisc, parent); 538808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf} 548808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 558808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Grafvoid nl_cli_qdisc_parse_handle(struct rtnl_qdisc *qdisc, char *arg) 568808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf{ 578808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf uint32_t handle; 588808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf int err; 598808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 608808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf if ((err = rtnl_tc_str2handle(arg, &handle)) < 0) 618808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf nl_cli_fatal(err, "Unable to parse handle \"%s\": %s", 628808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf arg, nl_geterror(err)); 638808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 648808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf rtnl_qdisc_set_handle(qdisc, handle); 658808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf} 668808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 678808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Grafvoid nl_cli_qdisc_parse_kind(struct rtnl_qdisc *qdisc, char *arg) 688808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf{ 698808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf rtnl_qdisc_set_kind(qdisc, arg); 708808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf} 718808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf 728808743839b0f459394ecd00cb0f7c1896c0ab7aThomas Graf/** @} */ 73