1 /*- 2 * BSD LICENSE 3 * 4 * Copyright(c) 2010-2012 Intel Corporation. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of Intel Corporation nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 * 33 * version: DPDK.L.1.2.3-3 34 */ 35 36 /* 37 * Copyright (c) 2009, Olivier MATZ <zer0@droids-corp.org> 38 * All rights reserved. 39 * Redistribution and use in source and binary forms, with or without 40 * modification, are permitted provided that the following conditions are met: 41 * 42 * * Redistributions of source code must retain the above copyright 43 * notice, this list of conditions and the following disclaimer. 44 * * Redistributions in binary form must reproduce the above copyright 45 * notice, this list of conditions and the following disclaimer in the 46 * documentation and/or other materials provided with the distribution. 47 * * Neither the name of the University of California, Berkeley nor the 48 * names of its contributors may be used to endorse or promote products 49 * derived from this software without specific prior written permission. 50 * 51 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY 52 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 53 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 54 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 55 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 56 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 57 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 58 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 59 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 60 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 61 */ 62 63 #include <stdio.h> 64 #include <inttypes.h> 65 #include <stdarg.h> 66 #include <errno.h> 67 #include <ctype.h> 68 #include <string.h> 69 #include <netinet/in.h> 70 71 #include <cmdline_parse.h> 72 #include <cmdline_parse_ipaddr.h> 73 74 #include <rte_string_fns.h> 75 76 #include "parse_obj_list.h" 77 78 /* This file is an example of extension of libcmdline. It provides an 79 * example of objects stored in a list. */ 80 81 struct cmdline_token_ops token_obj_list_ops = { 82 .parse = parse_obj_list, 83 .complete_get_nb = complete_get_nb_obj_list, 84 .complete_get_elt = complete_get_elt_obj_list, 85 .get_help = get_help_obj_list, 86 }; 87 88 int 89 parse_obj_list(cmdline_parse_token_hdr_t *tk, const char *buf, void *res) 90 { 91 struct token_obj_list *tk2 = (struct token_obj_list *)tk; 92 struct token_obj_list_data *tkd = &tk2->obj_list_data; 93 struct object *o; 94 unsigned int token_len = 0; 95 96 if (*buf == 0) 97 return -1; 98 99 while(!cmdline_isendoftoken(buf[token_len])) 100 token_len++; 101 102 SLIST_FOREACH(o, tkd->list, next) { 103 if (token_len != strnlen(o->name, OBJ_NAME_LEN_MAX)) 104 continue; 105 if (strncmp(buf, o->name, token_len)) 106 continue; 107 break; 108 } 109 if (!o) /* not found */ 110 return -1; 111 112 /* store the address of object in structure */ 113 if (res) 114 *(struct object **)res = o; 115 116 return token_len; 117 } 118 119 int complete_get_nb_obj_list(cmdline_parse_token_hdr_t *tk) 120 { 121 struct token_obj_list *tk2 = (struct token_obj_list *)tk; 122 struct token_obj_list_data *tkd = &tk2->obj_list_data; 123 struct object *o; 124 int ret = 0; 125 126 SLIST_FOREACH(o, tkd->list, next) { 127 ret ++; 128 } 129 return ret; 130 } 131 132 int complete_get_elt_obj_list(cmdline_parse_token_hdr_t *tk, 133 int idx, char *dstbuf, unsigned int size) 134 { 135 struct token_obj_list *tk2 = (struct token_obj_list *)tk; 136 struct token_obj_list_data *tkd = &tk2->obj_list_data; 137 struct object *o; 138 int i = 0; 139 unsigned len; 140 141 SLIST_FOREACH(o, tkd->list, next) { 142 if (i++ == idx) 143 break; 144 } 145 if (!o) 146 return -1; 147 148 len = strnlen(o->name, OBJ_NAME_LEN_MAX); 149 if ((len + 1) > size) 150 return -1; 151 152 if (dstbuf) 153 rte_snprintf(dstbuf, size, "%s", o->name); 154 155 return 0; 156 } 157 158 159 int get_help_obj_list(__attribute__((unused)) cmdline_parse_token_hdr_t *tk, 160 char *dstbuf, unsigned int size) 161 { 162 rte_snprintf(dstbuf, size, "Obj-List"); 163 return 0; 164 } 165