projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
netdev-linux: Fix strict aliasing warnings.
[openvswitch]
/
lib
/
nx-match.c
diff --git
a/lib/nx-match.c
b/lib/nx-match.c
index 92d3b9e4569068e10b92168b70d549cae7e82786..f887cdb5796670a7ef2062b20e1b34af53301165 100644
(file)
--- a/
lib/nx-match.c
+++ b/
lib/nx-match.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 2010 Nicira Networks.
+ * Copyright (c) 2010
, 2011
Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-123,7
+123,7
@@
nxm_field_lookup(uint32_t header)
/* Returns the width of the data for a field with the given 'header', in
* bytes. */
/* Returns the width of the data for a field with the given 'header', in
* bytes. */
-
static
int
+int
nxm_field_bytes(uint32_t header)
{
unsigned int length = NXM_LENGTH(header);
nxm_field_bytes(uint32_t header)
{
unsigned int length = NXM_LENGTH(header);
@@
-132,7
+132,7
@@
nxm_field_bytes(uint32_t header)
/* Returns the width of the data for a field with the given 'header', in
* bits. */
/* Returns the width of the data for a field with the given 'header', in
* bits. */
-
static
int
+int
nxm_field_bits(uint32_t header)
{
return nxm_field_bytes(header) * 8;
nxm_field_bits(uint32_t header)
{
return nxm_field_bytes(header) * 8;
@@
-824,8
+824,8
@@
nx_match_from_string(const char *s, struct ofpbuf *b)
return match_len;
}
\f
return match_len;
}
\f
-
static
const char *
-
parse_nxm
_field_bits(const char *s, uint32_t *headerp, int *ofsp, int *n_bitsp)
+const char *
+
nxm_parse
_field_bits(const char *s, uint32_t *headerp, int *ofsp, int *n_bitsp)
{
const char *full_s = s;
const char *name;
{
const char *full_s = s;
const char *name;
@@
-886,12
+886,12
@@
nxm_parse_reg_move(struct nx_action_reg_move *move, const char *s)
int src_ofs, dst_ofs;
int src_n_bits, dst_n_bits;
int src_ofs, dst_ofs;
int src_n_bits, dst_n_bits;
- s =
parse_nxm
_field_bits(s, &src, &src_ofs, &src_n_bits);
+ s =
nxm_parse
_field_bits(s, &src, &src_ofs, &src_n_bits);
if (strncmp(s, "->", 2)) {
ovs_fatal(0, "%s: missing `->' following source", full_s);
}
s += 2;
if (strncmp(s, "->", 2)) {
ovs_fatal(0, "%s: missing `->' following source", full_s);
}
s += 2;
- s =
parse_nxm
_field_bits(s, &dst, &dst_ofs, &dst_n_bits);
+ s =
nxm_parse
_field_bits(s, &dst, &dst_ofs, &dst_n_bits);
if (*s != '\0') {
ovs_fatal(0, "%s: trailing garbage following destination", full_s);
}
if (*s != '\0') {
ovs_fatal(0, "%s: trailing garbage following destination", full_s);
}
@@
-925,7
+925,7
@@
nxm_parse_reg_load(struct nx_action_reg_load *load, const char *s)
ovs_fatal(0, "%s: missing `->' following value", full_s);
}
s += 2;
ovs_fatal(0, "%s: missing `->' following value", full_s);
}
s += 2;
- s =
parse_nxm
_field_bits(s, &dst, &ofs, &n_bits);
+ s =
nxm_parse
_field_bits(s, &dst, &ofs, &n_bits);
if (*s != '\0') {
ovs_fatal(0, "%s: trailing garbage following destination", full_s);
}
if (*s != '\0') {
ovs_fatal(0, "%s: trailing garbage following destination", full_s);
}
@@
-946,14
+946,16
@@
nxm_parse_reg_load(struct nx_action_reg_load *load, const char *s)
\f
/* nxm_format_reg_move(), nxm_format_reg_load(). */
\f
/* nxm_format_reg_move(), nxm_format_reg_load(). */
-
static
void
-
format_nxm
_field_bits(struct ds *s, uint32_t header, int ofs, int n_bits)
+void
+
nxm_format
_field_bits(struct ds *s, uint32_t header, int ofs, int n_bits)
{
format_nxm_field_name(s, header);
{
format_nxm_field_name(s, header);
- if (
n_bits != 1
) {
- ds_put_
format(s, "[%d..%d]", ofs, ofs + n_bits - 1
);
- } else {
+ if (
ofs == 0 && n_bits == nxm_field_bits(header)
) {
+ ds_put_
cstr(s, "[]"
);
+ } else
if (n_bits == 1)
{
ds_put_format(s, "[%d]", ofs);
ds_put_format(s, "[%d]", ofs);
+ } else {
+ ds_put_format(s, "[%d..%d]", ofs, ofs + n_bits - 1);
}
}
}
}
@@
-967,9
+969,9
@@
nxm_format_reg_move(const struct nx_action_reg_move *move, struct ds *s)
uint32_t dst = ntohl(move->dst);
ds_put_format(s, "move:");
uint32_t dst = ntohl(move->dst);
ds_put_format(s, "move:");
-
format_nxm
_field_bits(s, src, src_ofs, n_bits);
+
nxm_format
_field_bits(s, src, src_ofs, n_bits);
ds_put_cstr(s, "->");
ds_put_cstr(s, "->");
-
format_nxm
_field_bits(s, dst, dst_ofs, n_bits);
+
nxm_format
_field_bits(s, dst, dst_ofs, n_bits);
}
void
}
void
@@
-980,8
+982,8
@@
nxm_format_reg_load(const struct nx_action_reg_load *load, struct ds *s)
uint32_t dst = ntohl(load->dst);
uint64_t value = ntohll(load->value);
uint32_t dst = ntohl(load->dst);
uint64_t value = ntohll(load->value);
- ds_put_format(s, "load:%
"PRIu
64"->", value);
-
format_nxm
_field_bits(s, dst, ofs, n_bits);
+ ds_put_format(s, "load:%
#"PRIx
64"->", value);
+
nxm_format
_field_bits(s, dst, ofs, n_bits);
}
\f
/* nxm_check_reg_move(), nxm_check_reg_load(). */
}
\f
/* nxm_check_reg_move(), nxm_check_reg_load(). */