/* Add an IP address to the list of IP addresses an interface is * known to use. This function feeds the per-interface cache that * is used to instantiate filters with variable '$IP'. * * @ifname: The name of the (tap) interface * @addr: An IPv4 address in dotted decimal format that the (tap) * interface is known to use. * * This function returns 0 on success, -1 otherwise */ int virNWFilterIPAddrMapAddIPAddr(const char *ifname, char *addr) { int ret = -1; virNWFilterVarValuePtr val; virMutexLock(&ipAddressMapLock); val = virHashLookup(ipAddressMap->hashTable, ifname); if (!val) { val = virNWFilterVarValueCreateSimple(addr); if (!val) { virReportOOMError(); goto cleanup; } ret = virNWFilterHashTablePut(ipAddressMap, ifname, val, 1); goto cleanup; } else { if (virNWFilterVarValueAddValue(val, addr) < 0) goto cleanup; } ret = 0; cleanup: virMutexUnlock(&ipAddressMapLock); return ret; }
virNWFilterVarValuePtr virNWFilterVarValueCreateSimpleCopyValue(const char *value) { char *val; if (VIR_STRDUP(val, value) < 0) return NULL; return virNWFilterVarValueCreateSimple(val); }
virNWFilterVarValuePtr virNWFilterVarValueCreateSimpleCopyValue(const char *value) { char *val; virNWFilterVarValuePtr ret; if (VIR_STRDUP(val, value) < 0) return NULL; ret = virNWFilterVarValueCreateSimple(val); if (!ret) VIR_FREE(val); return ret; }
/** * virNWFilterVarHashmapAddStdValues: * @tables: pointer to hash tabel to add values to * @macaddr: The string of the MAC address to add to the hash table, * may be NULL * @ipaddr: The string of the IP address to add to the hash table; * may be NULL * * Returns 0 in case of success, -1 in case an error happened with * error having been reported. * * Adds a couple of standard keys (MAC, IP) to the hash table. */ static int virNWFilterVarHashmapAddStdValues(virNWFilterHashTablePtr table, char *macaddr, const virNWFilterVarValuePtr ipaddr) { virNWFilterVarValue *val; if (macaddr) { val = virNWFilterVarValueCreateSimple(macaddr); if (!val) return -1; if (virHashAddEntry(table->hashTable, NWFILTER_STD_VAR_MAC, val) < 0) { virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not add variable 'MAC' to hashmap")); return -1; } } if (ipaddr) { val = virNWFilterVarValueCopy(ipaddr); if (!val) return -1; if (virHashAddEntry(table->hashTable, NWFILTER_STD_VAR_IP, val) < 0) { virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not add variable 'IP' to hashmap")); return -1; } } return 0; }