Changeset fa101c4 in mainline
- Timestamp:
- 2012-03-08T22:30:19Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 637a3b4
- Parents:
- 291c792
- Location:
- uspace
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/inetcfg/inetcfg.c
r291c792 rfa101c4 48 48 static void print_syntax(void) 49 49 { 50 printf("syntax: " NAME " create <addr>/<width> <link-name> <addr-name>\n"); 50 printf("syntax:\n"); 51 printf("\t" NAME " create <addr>/<width> <link-name> <addr-name>\n"); 52 printf("\t" NAME " delete <link-name> <addr-name>\n"); 51 53 } 52 54 … … 143 145 if (rc != EOK) { 144 146 printf(NAME ": Failed creating static address '%s' (%d)\n", 145 "v4s", rc); 147 aobj_name, rc); 148 return EIO; 149 } 150 151 return EOK; 152 } 153 154 static int addr_delete(int argc, char *argv[]) 155 { 156 char *aobj_name; 157 char *link_name; 158 sysarg_t link_id; 159 sysarg_t addr_id; 160 int rc; 161 162 if (argc < 2) { 163 printf(NAME ": Missing arguments.\n"); 164 print_syntax(); 165 return EINVAL; 166 } 167 168 if (argc > 2) { 169 printf(NAME ": Too many arguments.\n"); 170 print_syntax(); 171 return EINVAL; 172 } 173 174 link_name = argv[0]; 175 aobj_name = argv[1]; 176 177 rc = loc_service_get_id(link_name, &link_id, 0); 178 if (rc != EOK) { 179 printf(NAME ": Service '%s' not found (%d).\n", link_name, rc); 180 return ENOENT; 181 } 182 183 rc = inetcfg_addr_get_id(aobj_name, link_id, &addr_id); 184 if (rc != EOK) { 185 printf(NAME ": Address '%s' not found (%d).\n", aobj_name, rc); 186 return ENOENT; 187 } 188 189 rc = inetcfg_addr_delete(addr_id); 190 if (rc != EOK) { 191 printf(NAME ": Failed deleting address '%s' (%d)\n", aobj_name, 192 rc); 146 193 return EIO; 147 194 } … … 223 270 if (rc != EOK) 224 271 return 1; 272 } else if (str_cmp(argv[1], "delete") == 0) { 273 rc = addr_delete(argc - 2, argv + 2); 274 if (rc != EOK) 275 return 1; 225 276 } else { 226 277 printf(NAME ": Unknown command '%s'.\n", argv[1]); -
uspace/lib/c/generic/inetcfg.c
r291c792 rfa101c4 205 205 } 206 206 207 int inetcfg_addr_get_id(const char *name, sysarg_t link_id, sysarg_t *addr_id) 208 { 209 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 210 211 ipc_call_t answer; 212 aid_t req = async_send_1(exch, INETCFG_ADDR_GET_ID, link_id, &answer); 213 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 214 215 async_exchange_end(exch); 216 217 if (retval != EOK) { 218 async_wait_for(req, NULL); 219 return retval; 220 } 221 222 async_wait_for(req, &retval); 223 *addr_id = IPC_GET_ARG1(answer); 224 225 return retval; 226 } 227 207 228 int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count) 208 229 { -
uspace/lib/c/include/inet/inetcfg.h
r291c792 rfa101c4 67 67 extern int inetcfg_addr_delete(sysarg_t); 68 68 extern int inetcfg_addr_get(sysarg_t, inet_addr_info_t *); 69 extern int inetcfg_addr_get_id(const char *, sysarg_t, sysarg_t *); 69 70 extern int inetcfg_get_addr_list(sysarg_t **, size_t *); 70 71 extern int inetcfg_get_link_list(sysarg_t **, size_t *); -
uspace/lib/c/include/ipc/inet.h
r291c792 rfa101c4 64 64 INETCFG_ADDR_DELETE, 65 65 INETCFG_ADDR_GET, 66 INETCFG_ADDR_GET_ID, 66 67 INETCFG_GET_ADDR_LIST, 67 68 INETCFG_GET_LINK_LIST, -
uspace/srv/inet/addrobj.c
r291c792 rfa101c4 41 41 #include <ipc/loc.h> 42 42 #include <stdlib.h> 43 #include <str.h> 43 44 44 45 #include "addrobj.h" … … 119 120 fibril_mutex_unlock(&addr_list_lock); 120 121 log_msg(LVL_DEBUG, "inet_addrobj_find: found %p", 121 addr);122 naddr); 122 123 return naddr; 123 124 } … … 125 126 126 127 log_msg(LVL_DEBUG, "inet_addrobj_find: Not found"); 128 fibril_mutex_unlock(&addr_list_lock); 129 130 return NULL; 131 } 132 133 /** Find address object on a link, with a specific name. 134 * 135 * @param name Address object name 136 * @param ilink Inet link 137 * @return Address object 138 */ 139 inet_addrobj_t *inet_addrobj_find_by_name(const char *name, inet_link_t *ilink) 140 { 141 log_msg(LVL_DEBUG, "inet_addrobj_find_by_name('%s', '%s')", 142 name, ilink->svc_name); 143 144 fibril_mutex_lock(&addr_list_lock); 145 146 list_foreach(addr_list, link) { 147 inet_addrobj_t *naddr = list_get_instance(link, 148 inet_addrobj_t, addr_list); 149 150 if (naddr->ilink == ilink && str_cmp(naddr->name, name) == 0) { 151 fibril_mutex_unlock(&addr_list_lock); 152 log_msg(LVL_DEBUG, "inet_addrobj_find_by_name: found %p", 153 naddr); 154 return naddr; 155 } 156 } 157 158 log_msg(LVL_DEBUG, "inet_addrobj_find_by_name: Not found"); 127 159 fibril_mutex_unlock(&addr_list_lock); 128 160 -
uspace/srv/inet/addrobj.h
r291c792 rfa101c4 53 53 extern void inet_addrobj_remove(inet_addrobj_t *); 54 54 extern inet_addrobj_t *inet_addrobj_find(inet_addr_t *, inet_addrobj_find_t); 55 extern inet_addrobj_t *inet_addrobj_find_by_name(const char *, inet_link_t *); 55 56 extern inet_addrobj_t *inet_addrobj_get_by_id(sysarg_t); 56 57 extern int inet_addrobj_send_dgram(inet_addrobj_t *, inet_dgram_t *, -
uspace/srv/inet/inetcfg.c
r291c792 rfa101c4 85 85 static int inetcfg_addr_delete(sysarg_t addr_id) 86 86 { 87 return ENOTSUP; 87 inet_addrobj_t *addr; 88 89 addr = inet_addrobj_get_by_id(addr_id); 90 if (addr == NULL) 91 return ENOENT; 92 93 inet_addrobj_remove(addr); 94 inet_addrobj_delete(addr); 95 96 return EOK; 88 97 } 89 98 … … 100 109 ainfo->name = str_dup(addr->name); 101 110 111 return EOK; 112 } 113 114 static int inetcfg_addr_get_id(char *name, sysarg_t link_id, sysarg_t *addr_id) 115 { 116 inet_link_t *ilink; 117 inet_addrobj_t *addr; 118 119 ilink = inet_link_get_by_id(link_id); 120 if (ilink == NULL) { 121 log_msg(LVL_DEBUG, "Link %zu not found.", (size_t) link_id); 122 return ENOENT; 123 } 124 125 addr = inet_addrobj_find_by_name(name, ilink); 126 if (addr == NULL) { 127 log_msg(LVL_DEBUG, "Address '%s' not found.", name); 128 return ENOENT; 129 } 130 131 *addr_id = addr->id; 102 132 return EOK; 103 133 } … … 202 232 async_answer_3(callid, retval, ainfo.naddr.ipv4, ainfo.naddr.bits, 203 233 ainfo.ilink); 234 } 235 236 static void inetcfg_addr_get_id_srv(ipc_callid_t callid, ipc_call_t *call) 237 { 238 char *name; 239 sysarg_t link_id; 240 sysarg_t addr_id; 241 int rc; 242 243 log_msg(LVL_DEBUG, "inetcfg_addr_get_id_srv()"); 244 245 link_id = IPC_GET_ARG1(*call); 246 247 rc = async_data_write_accept((void **) &name, true, 0, LOC_NAME_MAXLEN, 248 0, NULL); 249 if (rc != EOK) { 250 async_answer_0(callid, rc); 251 return; 252 } 253 254 addr_id = 0; 255 rc = inetcfg_addr_get_id(name, link_id, &addr_id); 256 free(name); 257 async_answer_1(callid, rc, addr_id); 204 258 } 205 259 … … 333 387 inetcfg_addr_get_srv(callid, &call); 334 388 break; 389 case INETCFG_ADDR_GET_ID: 390 inetcfg_addr_get_id_srv(callid, &call); 391 break; 335 392 case INETCFG_GET_ADDR_LIST: 336 393 inetcfg_get_addr_list_srv(callid, &call);
Note:
See TracChangeset
for help on using the changeset viewer.