5353
5454namespace ipxp {
5555
56- struct FrameSignature : public RecordExt , public std ::array< unsigned char , 18 > {
56+ struct FlexprobeData : public RecordExt {
5757 static int REGISTERED_ID;
58+ std::array<unsigned char , 18 > frame_signature;
59+ std::uint8_t interface_in;
5860
59- FrameSignature () : RecordExt(REGISTERED_ID), std::array< unsigned char , 18 >( )
61+ FlexprobeData () : RecordExt(REGISTERED_ID), interface_in( 0 )
6062 {
63+ frame_signature.fill (0x0 );
6164 }
6265
6366 virtual int fill_ipfix (uint8_t *buffer, int size)
6467 {
65- if (sizeof (Flexprobe::FrameSignature ) > size) {
68+ if (( sizeof (frame_signature) + sizeof (interface_in) ) > size) {
6669 return -1 ;
6770 }
68- std::copy (begin (), end (), buffer);
71+ std::copy (frame_signature.begin (), frame_signature.end (), buffer);
72+ *(buffer + sizeof (frame_signature)) = interface_in;
6973
70- return sizeof (Flexprobe::FrameSignature );
74+ return frame_signature. size () + sizeof (interface_in );
7175 }
7276
7377 const char **get_ipfix_tmplt () const
@@ -87,7 +91,7 @@ class FlexprobeDataProcessing : public ProcessPlugin
8791
8892 void init (const char *params) {}
8993 void close () {}
90- RecordExt *get_ext () const { return new FrameSignature (); }
94+ RecordExt *get_ext () const { return new FlexprobeData (); }
9195 OptionsParser *get_parser () const { return new OptionsParser (" flexprobe-data" , " Parse flexprobe data (Flexprobe HW only)" ); }
9296 std::string get_name () const { return " flexprobe-data" ; }
9397 FlexprobeDataProcessing *copy () override
@@ -101,11 +105,12 @@ class FlexprobeDataProcessing : public ProcessPlugin
101105 return 0 ;
102106 }
103107
104- if (!rec.get_extension (FrameSignature ::REGISTERED_ID)) {
105- auto *fs = new FrameSignature ();
108+ if (!rec.get_extension (FlexprobeData ::REGISTERED_ID)) {
109+ auto *fd = new FlexprobeData ();
106110 auto data_view = reinterpret_cast <const Flexprobe::FlexprobeData*>(pkt.custom );
107- std::copy (data_view->frame_signature .begin (), data_view->frame_signature .end (), fs->begin ());
108- rec.add_extension (fs);
111+ std::copy (data_view->frame_signature .begin (), data_view->frame_signature .end (), fd->frame_signature .begin ());
112+ fd->interface_in = data_view->interface_in ;
113+ rec.add_extension (fd);
109114 }
110115 return 0 ;
111116 }
0 commit comments