Lines Matching refs:attr
140 static int garp_attr_cmp(const struct garp_attr *attr, in garp_attr_cmp() argument
143 if (attr->type != type) in garp_attr_cmp()
144 return attr->type - type; in garp_attr_cmp()
145 if (attr->dlen != len) in garp_attr_cmp()
146 return attr->dlen - len; in garp_attr_cmp()
147 return memcmp(attr->data, data, len); in garp_attr_cmp()
154 struct garp_attr *attr; in garp_attr_lookup() local
158 attr = rb_entry(parent, struct garp_attr, node); in garp_attr_lookup()
159 d = garp_attr_cmp(attr, data, len, type); in garp_attr_lookup()
165 return attr; in garp_attr_lookup()
174 struct garp_attr *attr; in garp_attr_create() local
179 attr = rb_entry(parent, struct garp_attr, node); in garp_attr_create()
180 d = garp_attr_cmp(attr, data, len, type); in garp_attr_create()
187 return attr; in garp_attr_create()
190 attr = kmalloc(sizeof(*attr) + len, GFP_ATOMIC); in garp_attr_create()
191 if (!attr) in garp_attr_create()
192 return attr; in garp_attr_create()
193 attr->state = GARP_APPLICANT_VO; in garp_attr_create()
194 attr->type = type; in garp_attr_create()
195 attr->dlen = len; in garp_attr_create()
196 memcpy(attr->data, data, len); in garp_attr_create()
198 rb_link_node(&attr->node, parent, p); in garp_attr_create()
199 rb_insert_color(&attr->node, &app->gid); in garp_attr_create()
200 return attr; in garp_attr_create()
203 static void garp_attr_destroy(struct garp_applicant *app, struct garp_attr *attr) in garp_attr_destroy() argument
205 rb_erase(&attr->node, &app->gid); in garp_attr_destroy()
206 kfree(attr); in garp_attr_destroy()
278 const struct garp_attr *attr, in garp_pdu_append_attr() argument
291 if (garp_cb(app->pdu)->cur_type != attr->type) { in garp_pdu_append_attr()
295 if (garp_pdu_append_msg(app, attr->type) < 0) in garp_pdu_append_attr()
299 len = sizeof(*ga) + attr->dlen; in garp_pdu_append_attr()
305 memcpy(ga->data, attr->data, attr->dlen); in garp_pdu_append_attr()
314 struct garp_attr *attr, enum garp_event event) in garp_attr_event() argument
318 state = garp_applicant_state_table[attr->state][event].state; in garp_attr_event()
322 switch (garp_applicant_state_table[attr->state][event].action) { in garp_attr_event()
328 if (garp_pdu_append_attr(app, attr, GARP_JOIN_IN) < 0) in garp_attr_event()
332 garp_pdu_append_attr(app, attr, GARP_LEAVE_EMPTY); in garp_attr_event()
335 garp_attr_destroy(app, attr); in garp_attr_event()
341 attr->state = state; in garp_attr_event()
350 struct garp_attr *attr; in garp_request_join() local
353 attr = garp_attr_create(app, data, len, type); in garp_request_join()
354 if (!attr) { in garp_request_join()
358 garp_attr_event(app, attr, GARP_EVENT_REQ_JOIN); in garp_request_join()
370 struct garp_attr *attr; in garp_request_leave() local
373 attr = garp_attr_lookup(app, data, len, type); in garp_request_leave()
374 if (!attr) { in garp_request_leave()
378 garp_attr_event(app, attr, GARP_EVENT_REQ_LEAVE); in garp_request_leave()
386 struct garp_attr *attr; in garp_gid_event() local
391 attr = rb_entry(node, struct garp_attr, node); in garp_gid_event()
392 garp_attr_event(app, attr, event); in garp_gid_event()
432 struct garp_attr *attr; in garp_pdu_parse_attr() local
474 attr = garp_attr_lookup(app, ga->data, dlen, attrtype); in garp_pdu_parse_attr()
475 if (attr == NULL) in garp_pdu_parse_attr()
477 garp_attr_event(app, attr, event); in garp_pdu_parse_attr()