Lines Matching refs:attr
229 static int mrp_attr_cmp(const struct mrp_attr *attr, in mrp_attr_cmp() argument
232 if (attr->type != type) in mrp_attr_cmp()
233 return attr->type - type; in mrp_attr_cmp()
234 if (attr->len != len) in mrp_attr_cmp()
235 return attr->len - len; in mrp_attr_cmp()
236 return memcmp(attr->value, value, len); in mrp_attr_cmp()
243 struct mrp_attr *attr; in mrp_attr_lookup() local
247 attr = rb_entry(parent, struct mrp_attr, node); in mrp_attr_lookup()
248 d = mrp_attr_cmp(attr, value, len, type); in mrp_attr_lookup()
254 return attr; in mrp_attr_lookup()
263 struct mrp_attr *attr; in mrp_attr_create() local
268 attr = rb_entry(parent, struct mrp_attr, node); in mrp_attr_create()
269 d = mrp_attr_cmp(attr, value, len, type); in mrp_attr_create()
276 return attr; in mrp_attr_create()
279 attr = kmalloc(sizeof(*attr) + len, GFP_ATOMIC); in mrp_attr_create()
280 if (!attr) in mrp_attr_create()
281 return attr; in mrp_attr_create()
282 attr->state = MRP_APPLICANT_VO; in mrp_attr_create()
283 attr->type = type; in mrp_attr_create()
284 attr->len = len; in mrp_attr_create()
285 memcpy(attr->value, value, len); in mrp_attr_create()
287 rb_link_node(&attr->node, parent, p); in mrp_attr_create()
288 rb_insert_color(&attr->node, &app->mad); in mrp_attr_create()
289 return attr; in mrp_attr_create()
292 static void mrp_attr_destroy(struct mrp_applicant *app, struct mrp_attr *attr) in mrp_attr_destroy() argument
294 rb_erase(&attr->node, &app->mad); in mrp_attr_destroy()
295 kfree(attr); in mrp_attr_destroy()
395 const struct mrp_attr *attr, in mrp_pdu_append_vecattr_event() argument
413 mrp_cb(app->pdu)->mh->attrtype != attr->type || in mrp_pdu_append_vecattr_event()
414 mrp_cb(app->pdu)->mh->attrlen != attr->len) { in mrp_pdu_append_vecattr_event()
415 if (mrp_pdu_append_msg_hdr(app, attr->type, attr->len) < 0) in mrp_pdu_append_vecattr_event()
424 memcmp(mrp_cb(app->pdu)->attrvalue, attr->value, attr->len)) { in mrp_pdu_append_vecattr_event()
425 if (mrp_pdu_append_vecattr_hdr(app, attr->value, attr->len) < 0) in mrp_pdu_append_vecattr_event()
462 mrp_attrvalue_inc(mrp_cb(app->pdu)->attrvalue, attr->len); in mrp_pdu_append_vecattr_event()
472 struct mrp_attr *attr, enum mrp_event event) in mrp_attr_event() argument
476 state = mrp_applicant_state_table[attr->state][event]; in mrp_attr_event()
487 switch (mrp_tx_action_table[attr->state]) { in mrp_attr_event()
494 app, attr, MRP_VECATTR_EVENT_NEW) < 0) in mrp_attr_event()
499 app, attr, MRP_VECATTR_EVENT_JOIN_IN) < 0) in mrp_attr_event()
504 app, attr, MRP_VECATTR_EVENT_LV) < 0) in mrp_attr_event()
510 mrp_attr_destroy(app, attr); in mrp_attr_event()
517 attr->state = state; in mrp_attr_event()
527 struct mrp_attr *attr; in mrp_request_join() local
534 attr = mrp_attr_create(app, value, len, type); in mrp_request_join()
535 if (!attr) { in mrp_request_join()
539 mrp_attr_event(app, attr, MRP_EVENT_JOIN); in mrp_request_join()
552 struct mrp_attr *attr; in mrp_request_leave() local
559 attr = mrp_attr_lookup(app, value, len, type); in mrp_request_leave()
560 if (!attr) { in mrp_request_leave()
564 mrp_attr_event(app, attr, MRP_EVENT_LV); in mrp_request_leave()
572 struct mrp_attr *attr; in mrp_mad_event() local
577 attr = rb_entry(node, struct mrp_attr, node); in mrp_mad_event()
578 mrp_attr_event(app, attr, event); in mrp_mad_event()
638 struct mrp_attr *attr; in mrp_pdu_parse_vecattr_event() local
641 attr = mrp_attr_lookup(app, mrp_cb(skb)->attrvalue, in mrp_pdu_parse_vecattr_event()
644 if (attr == NULL) in mrp_pdu_parse_vecattr_event()
670 mrp_attr_event(app, attr, event); in mrp_pdu_parse_vecattr_event()