Lines Matching defs:ifs
117 struct ifaddrs_storage *ifs, *ifs0;
136 ifs = calloc(1, sizeof(struct ifaddrs_storage) + stats_len);
137 if (ifs == 0) return -1;
140 ifs->index = ifi->ifi_index;
141 ifs->ifa.ifa_flags = ifi->ifi_flags;
146 if (RTA_DATALEN(rta) < sizeof(ifs->name)) {
147 memcpy(ifs->name, RTA_DATA(rta), RTA_DATALEN(rta));
148 ifs->ifa.ifa_name = ifs->name;
152 copy_lladdr(&ifs->ifa.ifa_addr, &ifs->addr, RTA_DATA(rta), RTA_DATALEN(rta), ifi->ifi_index, ifi->ifi_type);
155 copy_lladdr(&ifs->ifa.ifa_broadaddr, &ifs->ifu, RTA_DATA(rta), RTA_DATALEN(rta), ifi->ifi_index, ifi->ifi_type);
158 ifs->ifa.ifa_data = (void*)(ifs + 1);
159 memcpy(ifs->ifa.ifa_data, RTA_DATA(rta), RTA_DATALEN(rta));
163 if (ifs->ifa.ifa_name) {
164 unsigned int bucket = ifs->index % IFADDRS_HASH_SIZE;
165 ifs->hash_next = ctx->hash[bucket];
166 ctx->hash[bucket] = ifs;
169 ifs->ifa.ifa_name = ifs0->ifa.ifa_name;
170 ifs->ifa.ifa_flags = ifs0->ifa.ifa_flags;
176 if (ifs->ifa.ifa_addr)
177 copy_addr(&ifs->ifa.ifa_dstaddr, ifa->ifa_family, &ifs->ifu, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
179 copy_addr(&ifs->ifa.ifa_addr, ifa->ifa_family, &ifs->addr, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
182 copy_addr(&ifs->ifa.ifa_broadaddr, ifa->ifa_family, &ifs->ifu, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
187 if (ifs->ifa.ifa_addr) {
188 ifs->ifu = ifs->addr;
189 ifs->ifa.ifa_dstaddr = &ifs->ifu.sa;
190 memset(&ifs->addr, 0, sizeof(ifs->addr));
192 copy_addr(&ifs->ifa.ifa_addr, ifa->ifa_family, &ifs->addr, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
195 if (RTA_DATALEN(rta) < sizeof(ifs->name)) {
196 memcpy(ifs->name, RTA_DATA(rta), RTA_DATALEN(rta));
197 ifs->ifa.ifa_name = ifs->name;
202 if (ifs->ifa.ifa_addr)
203 gen_netmask(&ifs->ifa.ifa_netmask, ifa->ifa_family, &ifs->netmask, ifa->ifa_prefixlen);
206 if (ifs->ifa.ifa_name) {
207 if (!ctx->first) ctx->first = &ifs->ifa;
208 if (ctx->last) ctx->last->ifa_next = &ifs->ifa;
209 ctx->last = &ifs->ifa;
211 free(ifs);