nicbm.cc 3.14 KB
Newer Older
Antoine Kaufmann's avatar
Antoine Kaufmann committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
 * Copyright 2021 Max Planck Institute for Software Systems, and
 * National University of Singapore
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
Antoine Kaufmann's avatar
Antoine Kaufmann committed
24

25
26
#include <iostream>

Antoine Kaufmann's avatar
Antoine Kaufmann committed
27
28
29
#include "trace/events.h"
#include "trace/parser.h"
#include "trace/process.h"
30
31
32

namespace bio = boost::iostreams;

33
nicbm_parser::~nicbm_parser() {
34
35
}

36
37
void nicbm_parser::process_line(char *line, size_t line_len) {
  parser p(line, line_len, 0);
38

39
40
41
  uint64_t ts;
  if (!p.consume_dec(ts))
    return;
42

43
44
  if (!p.consume_str(" nicbm: "))
    return;
45

46
47
48
49
  uint64_t id, addr, len, val;
  if (p.consume_str("read(off=0x")) {
    if (p.consume_hex(addr) && p.consume_str(", len=") && p.consume_dec(len) &&
        p.consume_str(", val=0x") && p.consume_hex(val)) {
50
      cur_event = std::make_shared<e_nic_mmio_r>(ts, addr, len, val);
Antoine Kaufmann's avatar
Antoine Kaufmann committed
51
    }
52
53
54
  } else if (p.consume_str("write(off=0x")) {
    if (p.consume_hex(addr) && p.consume_str(", len=") && p.consume_dec(len) &&
        p.consume_str(", val=0x") && p.consume_hex(val)) {
55
      cur_event = std::make_shared<e_nic_mmio_w>(ts, addr, len, val);
56
57
58
59
    }
  } else if (p.consume_str("issuing dma op 0x")) {
    if (p.consume_hex(id) && p.consume_str(" addr ") && p.consume_hex(addr) &&
        p.consume_str(" len ") && p.consume_hex(len)) {
60
      cur_event = std::make_shared<e_nic_dma_i>(ts, id, addr, len);
61
62
63
64
65
    }
  } else if (p.consume_str("completed dma read op 0x") ||
             p.consume_str("completed dma write op 0x")) {
    if (p.consume_hex(id) && p.consume_str(" addr ") && p.consume_hex(addr) &&
        p.consume_str(" len ") && p.consume_hex(len)) {
66
      cur_event = std::make_shared<e_nic_dma_c>(ts, id);
67
68
69
    }
  } else if (p.consume_str("issue MSI-X interrupt vec ")) {
    if (p.consume_dec(id)) {
70
      cur_event = std::make_shared<e_nic_msix>(ts, id);
Antoine Kaufmann's avatar
Antoine Kaufmann committed
71
    }
72
73
  } else if (p.consume_str("eth tx: len ")) {
    if (p.consume_dec(len)) {
74
      cur_event = std::make_shared<e_nic_tx>(ts, len);
75
76
77
    }
  } else if (p.consume_str("eth rx: port 0 len ")) {
    if (p.consume_dec(len)) {
78
      cur_event = std::make_shared<e_nic_rx>(ts, len);
79
80
81
82
83
84
85
86
    }
#if 1
  }
#else
  } else {
    std::cerr.write(line, line_len);
    std::cerr << std::endl;
  }
Antoine Kaufmann's avatar
Antoine Kaufmann committed
87
#endif
88
}