Lines Matching refs:mod
99 struct cf_mod *mod);
133 struct cf_mod mod;
154 struct cf_mod *mod) { op ; }
156 MODFUNC(mod_and_id, cf->can_id &= mod->modframe.and.can_id)
157 MODFUNC(mod_and_len, cf->len &= mod->modframe.and.len)
158 MODFUNC(mod_and_flags, cf->flags &= mod->modframe.and.flags)
159 MODFUNC(mod_and_data, *(u64 *)cf->data &= *(u64 *)mod->modframe.and.data)
160 MODFUNC(mod_or_id, cf->can_id |= mod->modframe.or.can_id)
161 MODFUNC(mod_or_len, cf->len |= mod->modframe.or.len)
162 MODFUNC(mod_or_flags, cf->flags |= mod->modframe.or.flags)
163 MODFUNC(mod_or_data, *(u64 *)cf->data |= *(u64 *)mod->modframe.or.data)
164 MODFUNC(mod_xor_id, cf->can_id ^= mod->modframe.xor.can_id)
165 MODFUNC(mod_xor_len, cf->len ^= mod->modframe.xor.len)
166 MODFUNC(mod_xor_flags, cf->flags ^= mod->modframe.xor.flags)
167 MODFUNC(mod_xor_data, *(u64 *)cf->data ^= *(u64 *)mod->modframe.xor.data)
168 MODFUNC(mod_set_id, cf->can_id = mod->modframe.set.can_id)
169 MODFUNC(mod_set_len, cf->len = mod->modframe.set.len)
170 MODFUNC(mod_set_flags, cf->flags = mod->modframe.set.flags)
171 MODFUNC(mod_set_data, *(u64 *)cf->data = *(u64 *)mod->modframe.set.data)
173 static void mod_and_fddata(struct canfd_frame *cf, struct cf_mod *mod)
178 *(u64 *)(cf->data + i) &= *(u64 *)(mod->modframe.and.data + i);
181 static void mod_or_fddata(struct canfd_frame *cf, struct cf_mod *mod)
186 *(u64 *)(cf->data + i) |= *(u64 *)(mod->modframe.or.data + i);
189 static void mod_xor_fddata(struct canfd_frame *cf, struct cf_mod *mod)
194 *(u64 *)(cf->data + i) ^= *(u64 *)(mod->modframe.xor.data + i);
197 static void mod_set_fddata(struct canfd_frame *cf, struct cf_mod *mod)
199 memcpy(cf->data, mod->modframe.set.data, CANFD_MAX_DLEN);
237 static void mod_and_ccdlc(struct canfd_frame *cf, struct cf_mod *mod)
240 mod_and_len(cf, mod);
244 static void mod_or_ccdlc(struct canfd_frame *cf, struct cf_mod *mod)
247 mod_or_len(cf, mod);
251 static void mod_xor_ccdlc(struct canfd_frame *cf, struct cf_mod *mod)
254 mod_xor_len(cf, mod);
258 static void mod_set_ccdlc(struct canfd_frame *cf, struct cf_mod *mod)
260 mod_set_len(cf, mod);
509 if (gwj->mod.modfunc[0])
532 while (modidx < MAX_MODFUNCTIONS && gwj->mod.modfunc[modidx])
533 (*gwj->mod.modfunc[modidx++])(cf, &gwj->mod);
549 if (gwj->mod.csumfunc.crc8)
550 (*gwj->mod.csumfunc.crc8)(cf, &gwj->mod.csum.crc8);
552 if (gwj->mod.csumfunc.xor)
553 (*gwj->mod.csumfunc.xor)(cf, &gwj->mod.csum.xor);
656 if (gwj->mod.modtype.and) {
657 memcpy(&mb.cf, &gwj->mod.modframe.and, sizeof(mb.cf));
658 mb.modtype = gwj->mod.modtype.and;
663 if (gwj->mod.modtype.or) {
664 memcpy(&mb.cf, &gwj->mod.modframe.or, sizeof(mb.cf));
665 mb.modtype = gwj->mod.modtype.or;
670 if (gwj->mod.modtype.xor) {
671 memcpy(&mb.cf, &gwj->mod.modframe.xor, sizeof(mb.cf));
672 mb.modtype = gwj->mod.modtype.xor;
677 if (gwj->mod.modtype.set) {
678 memcpy(&mb.cf, &gwj->mod.modframe.set, sizeof(mb.cf));
679 mb.modtype = gwj->mod.modtype.set;
686 if (gwj->mod.modtype.and) {
687 memcpy(&mb.cf, &gwj->mod.modframe.and, sizeof(mb.cf));
688 mb.modtype = gwj->mod.modtype.and;
693 if (gwj->mod.modtype.or) {
694 memcpy(&mb.cf, &gwj->mod.modframe.or, sizeof(mb.cf));
695 mb.modtype = gwj->mod.modtype.or;
700 if (gwj->mod.modtype.xor) {
701 memcpy(&mb.cf, &gwj->mod.modframe.xor, sizeof(mb.cf));
702 mb.modtype = gwj->mod.modtype.xor;
707 if (gwj->mod.modtype.set) {
708 memcpy(&mb.cf, &gwj->mod.modframe.set, sizeof(mb.cf));
709 mb.modtype = gwj->mod.modtype.set;
715 if (gwj->mod.uid) {
716 if (nla_put_u32(skb, CGW_MOD_UID, gwj->mod.uid) < 0)
720 if (gwj->mod.csumfunc.crc8) {
722 &gwj->mod.csum.crc8) < 0)
726 if (gwj->mod.csumfunc.xor) {
728 &gwj->mod.csum.xor) < 0)
800 static int cgw_parse_attr(struct nlmsghdr *nlh, struct cf_mod *mod,
809 memset(mod, 0, sizeof(*mod));
830 canfdframecpy(&mod->modframe.and, &mb.cf);
831 mod->modtype.and = mb.modtype;
834 mod->modfunc[modidx++] = mod_and_id;
837 mod->modfunc[modidx++] = mod_and_len;
840 mod->modfunc[modidx++] = mod_and_flags;
843 mod->modfunc[modidx++] = mod_and_fddata;
849 canfdframecpy(&mod->modframe.or, &mb.cf);
850 mod->modtype.or = mb.modtype;
853 mod->modfunc[modidx++] = mod_or_id;
856 mod->modfunc[modidx++] = mod_or_len;
859 mod->modfunc[modidx++] = mod_or_flags;
862 mod->modfunc[modidx++] = mod_or_fddata;
868 canfdframecpy(&mod->modframe.xor, &mb.cf);
869 mod->modtype.xor = mb.modtype;
872 mod->modfunc[modidx++] = mod_xor_id;
875 mod->modfunc[modidx++] = mod_xor_len;
878 mod->modfunc[modidx++] = mod_xor_flags;
881 mod->modfunc[modidx++] = mod_xor_fddata;
887 canfdframecpy(&mod->modframe.set, &mb.cf);
888 mod->modtype.set = mb.modtype;
891 mod->modfunc[modidx++] = mod_set_id;
894 mod->modfunc[modidx++] = mod_set_len;
897 mod->modfunc[modidx++] = mod_set_flags;
900 mod->modfunc[modidx++] = mod_set_fddata;
908 canframecpy(&mod->modframe.and, &mb.cf);
909 mod->modtype.and = mb.modtype;
912 mod->modfunc[modidx++] = mod_and_id;
915 mod->modfunc[modidx++] = mod_and_ccdlc;
918 mod->modfunc[modidx++] = mod_and_data;
924 canframecpy(&mod->modframe.or, &mb.cf);
925 mod->modtype.or = mb.modtype;
928 mod->modfunc[modidx++] = mod_or_id;
931 mod->modfunc[modidx++] = mod_or_ccdlc;
934 mod->modfunc[modidx++] = mod_or_data;
940 canframecpy(&mod->modframe.xor, &mb.cf);
941 mod->modtype.xor = mb.modtype;
944 mod->modfunc[modidx++] = mod_xor_id;
947 mod->modfunc[modidx++] = mod_xor_ccdlc;
950 mod->modfunc[modidx++] = mod_xor_data;
956 canframecpy(&mod->modframe.set, &mb.cf);
957 mod->modtype.set = mb.modtype;
960 mod->modfunc[modidx++] = mod_set_id;
963 mod->modfunc[modidx++] = mod_set_ccdlc;
966 mod->modfunc[modidx++] = mod_set_data;
980 nla_memcpy(&mod->csum.crc8, tb[CGW_CS_CRC8],
988 mod->csumfunc.crc8 = cgw_csum_crc8_rel;
990 mod->csumfunc.crc8 = cgw_csum_crc8_pos;
992 mod->csumfunc.crc8 = cgw_csum_crc8_neg;
1003 nla_memcpy(&mod->csum.xor, tb[CGW_CS_XOR],
1011 mod->csumfunc.xor = cgw_csum_xor_rel;
1013 mod->csumfunc.xor = cgw_csum_xor_pos;
1015 mod->csumfunc.xor = cgw_csum_xor_neg;
1019 nla_memcpy(&mod->uid, tb[CGW_MOD_UID], sizeof(u32));
1062 struct cf_mod mod;
1081 err = cgw_parse_attr(nlh, &mod, CGW_TYPE_CAN_CAN, &ccgw, &limhops);
1085 if (mod.uid) {
1090 if (gwj->mod.uid != mod.uid)
1099 memcpy(&gwj->mod, &mod, sizeof(mod));
1121 memcpy(&gwj->mod, &mod, sizeof(mod));
1182 struct cf_mod mod;
1201 err = cgw_parse_attr(nlh, &mod, CGW_TYPE_CAN_CAN, &ccgw, &limhops);
1224 if (gwj->mod.uid || mod.uid) {
1225 if (gwj->mod.uid != mod.uid)
1229 if (memcmp(&gwj->mod, &mod, sizeof(mod)))